2012-02-08 28 views
3

1つのクエリで2つの関連テーブルからデータを取得しようとしています。 テーブルは次のようになります。関連する2つのテーブルからデータを取得するにはどうすればよいですか?

表1:

-------------------------- 
| ID  | username | 
-------------------------- 
| 1   | user1  | 
| 2   | user2  | 
| 3   | user3  | 
| 4   | user4  | 
-------------------------- 

表2:

私は表2から表1およびキーと値のペアからすべての行を含む結果を取得したい
---------------------------------------------------- 
| ID  | user_id | key  | value  | 
---------------------------------------------------- 
| 1   | 1   | key1  | value1  | 
| 2   | 1   | key2  | value2  | 
| 3   | 2   | key2  | value3  | 
| 4   | 3   | key3  | value4  | 
| 5   | 4   | key1  | value5  | 
| 6   | 4   | key3  | value5  | 
---------------------------------------------------- 

key = key1です。キーが表1の特定の行に対して表1にない場合は、NULLを記入します。期待される結果の例:あるいは

---------------------------------------------------- 
| user_id | username | key  | value  | 
---------------------------------------------------- 
| 1   | user1  | key1  | value1  | 
| 2   | user2  | NULL  | NULL  | 
| 3   | user3  | NULL  | NULL  | 
| 4   | user4  | key1  | value5  | 
---------------------------------------------------- 

- I 2つのテーブルとからSELECTから標準SELECTを試みたテーブルのキー= KEY1 2.

をキーと値のペアが含まれていない表1のすべての行表1のJOINを表2に示しますが、表2のkey = key1のキー値ペアを含む表1のすべての行が表示されますが、これはまさに私が望むものとは逆です。

提案がありますか?持っていないことをすべてを得るためにあなたの "オルタナティブ" については

答えて

8
select 
     t1.id, 
     t1.username, 
     t2.key, 
     t2.value 
    from 
     table1 t1 
     left join table2 t2 
      on t1.id = t2.user_id 
      and t2.key = 'key1' 

、ちょうど

where t2.user_id IS NULL 
1

はこれを試してみてください。.. where句を追加します。

SELECT t1.username,t2.user_id,t2.key,t2.value FROM table1 as t1 left join table2 as t2 on(t1.id = t2.user_id) and t2.key = 'key' 
-1

クエリは次のようになります。 :

SELECT t1.username, t2.key, t2.value FROM table1 AS t1 
LEFT OUTER JOIN table2 AS t2 ON t1.id = t2.user_id; 

例えば、nのみ(didnのものをINVERSEを取得する方法を代わりに、彼は唯一の特定のキー=「キー1」を許可されたサンプルを探していた

+----------+------+--------+ 
| username | key | value | 
+----------+------+--------+ 
| user1 | key1 | value1 | 
| user1 | key2 | value2 | 
| user2 | key2 | value3 | 
| user3 | NULL | NULL | 
| user4 | key1 | value5 | 
| user4 | key3 | value5 | 
+----------+------+--------+ 
+0

、AND:O table2の中に3をUSER_ID、その後、クエリ(上記)を生成します't)。あなたは私の答えを見た... – DRapp

+0

ああ、私は参照してください。ありがとう。 –

関連する問題