2017-04-17 15 views
-1

私は、別のテーブル内の各ユーザの値を結果内の1つの出力行に取得しようとしているクエリを持っています。MySQLクエリを各ユーザの単一の行に連結する

SELECT DISTINCT table1.ID, table1.username, table1.display_name, 
       CASE WHEN table2.meta_key = 'vgm' THEN table2.meta_value END VGM, 
       CASE WHEN table2.meta_key = 'year_completed' THEN table2.meta_value END 'Year Completed', 
       CASE WHEN table2.meta_key = 'status' THEN table2.meta_value END Status, 
       CASE WHEN table2.meta_key = 'military_grade' THEN table2.meta_value END 'Military Grade' 
      FROM table1, table2 
      WHERE table1.ID = table2.user_id 

最終的には以下のような結果になります。可能であれば、すべてのユーザー情報を1行に表示したいと思います。誰でも何か提案がありますか?ありがとう。

<table> 
 
<tr> 
 
<td>3</td> 
 
<td>user1</td> 
 
<td>Username Last</td> 
 
<td>NULL</td> 
 
<td>NULL</td> 
 
<td>NULL</td> 
 
<td>NULL</td> 
 
</tr> 
 
<tr> 
 
<td>3</td> 
 
<td>user1</td> 
 
<td>Username Last</td> 
 
<td>NULL</td> 
 
<td>NULL</td> 
 
<td>Baja</td> 
 
<td>NULL</td> 
 
</tr> 
 
<tr> 
 
<td>3</td> 
 
<td>user1</td> 
 
<td>Username Last</td> 
 
<td>NULL</td> 
 
<td>112</td> 
 
<td>NULL</td> 
 
<td>NULL</td> 
 
</tr> 
 
<tr> 
 
<td>3</td> 
 
<td>user1</td> 
 
<td>Username Last</td> 
 
<td>NULL</td> 
 
<td>NULL</td> 
 
<td>NULL</td> 
 
<td>Subt</td> 
 
</tr> 
 
<tr> 
 
<td>3</td> 
 
<td>user1</td> 
 
<td>Username Last</td> 
 
<td>No</td> 
 
<td>NULL</td> 
 
<td>NULL</td> 
 
<td>NULL</td> 
 
</tr> 
 
</table>

表1のようなある:

<table> 
 
<tr> 
 
<td>ID</td> 
 
<td>NAME</td> 
 
<td>EMAIL</td> 
 
</tr> 
 
<tr> 
 
<td>3</td> 
 
<td>user1</td> 
 
<td>Username Last</td> 
 
</tr> 
 
<tr> 
 
<td>4</td> 
 
<td>user2</td> 
 
<td>Username2 Last2</td> 
 
</tr> 
 
</table>

表2のようなある:

<table> 
 
<tr> 
 
<td>ID</td> 
 
<td>USER_ID</td> 
 
<td>META_KEY</td> 
 
<td>META_VALUE</td> 
 
</tr> 
 
<tr> 
 
<td>1</td> 
 
<td>3</td> 
 
<td>Key 1</td> 
 
<td>Value 1</td> 
 
</tr> 
 
<tr> 
 
<td>1</td> 
 
<td>3</td> 
 
<td>Key 2</td> 
 
<td>Value 2</td> 
 
</tr> 
 
<tr> 
 
<td>1</td> 
 
<td>4</td> 
 
<td>Key 1</td> 
 
<td>Value 1</td> 
 
</tr> 
 
<tr> 
 
<td>1</td> 
 
<td>4</td> 
 
<td>Key 2</td> 
 
<td>Value 2</td> 
 
</tr> 
 
</table>

+1

は、私はここで何かが足りないのですか?あなたの結果はすでに一列になっていませんか? –

+0

コードsnippitを実行すると、出力には1人のユーザーに対して4つの異なる行があります。 NULL値を持たない1つの行にする必要があります。他のテーブルにはそれぞれ独自の行に複数の値があり、すべてのユーザー情報を1つのテーブル行に集約しようとしています。 –

+0

私は、table1とtable2のテーブルスキーマといくつかのサンプルデータを投稿してください。私はこれが2つのテーブルからfromの代わりにjoinを使うことで解決できると思っています。新しいクエリを提供する前に、まずリクエストされた情報を見る必要があります。 –

答えて

0

以下のクエリとあなたの主な違いは、私がtable2を取り、各meta_keyについてサブクエリを作成し、LEFT JOINを使用してtable1にそれらのサブクエリに参加しています。これにより、ユーザーごとに1つのレコードが作成されます。

あなたのテーブルスキーマとクエリは、このような、table1user_namedisplay_nameを持っているとして、いくつかの矛盾を、持っていますが、スキーマはNAMEEMAILています。私は先に進み、クエリのフィールド名を使用しました。

SQLクエリ

SELECT 
    users.ID AS Id, 
    users.username AS UserName, 
    users.display_name AS DisplayName, 
    vgm.meta_value AS VGM, 
    year_completed.meta_value AS YearCompleted, 
    status.meta_value AS Status, 
    military_grade.meta_value AS MilitaryGrade 

-- Users -- 
FROM table1 AS users 

-- VGM -- 
LEFT JOIN (
    SELECT user_id, meta_key, meta_value 
    FROM table2 
    WHERE meta_key = 'vgm') 
AS vgm ON users.ID = vgm.user_id 

-- Year Completed -- 
LEFT JOIN (
    SELECT user_id, meta_key, meta_value 
    FROM table2 
    WHERE meta_key = 'year_completed') 
AS year_completed ON users.ID = year_completed.user_id 

-- Status -- 
LEFT JOIN (
    SELECT user_id, meta_key, meta_value 
    FROM table2 
    WHERE meta_key = 'status') 
AS status ON users.ID = status.user_id 

-- Military Grade -- 
LEFT JOIN (
    SELECT user_id, meta_key, meta_value 
    FROM table2 
    WHERE meta_key = 'military_grade') 
AS military_grade ON users.ID = status.user_id 
関連する問題