2012-02-08 70 views
3

我想從一個查詢中的兩個相關表中獲取數據。 表是這樣的:如何從兩個相關表中獲取數據?

表1:

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

表2:

---------------------------------------------------- 
| 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  | 
---------------------------------------------------- 

我想包括從表1和鍵值對從表2中的所有行的結果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  | 
---------------------------------------------------- 

備選地 - 所有從表1不包含鍵 - 值對鍵KEY1 =表2

我從2個表和從SELECT試圖標準SELECT行表1與表2中的JOIN,但我得到的是表1中的所有行,其中包含表2中的key = key1的鍵值對,這與我想要的完全相反。

有什麼建議嗎?

回答

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子句..

where t2.user_id IS NULL 
1

試試這個:

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 Øuser_id說明表2中3,然後查詢(上圖)將產生:

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

,他一直在尋找只允許某個鍵=「鍵1」的樣本,以及或者如何獲得倒數(只有那些沒「T)。你有沒有看到我的回答... – DRapp 2012-02-08 22:52:17

+0

哦,我明白了。謝謝。 – 2012-02-08 23:07:55

相關問題