2014-06-26 77 views
1

我不明白爲什麼我所嘗試不起作用。列出所有行儘管加入

我有兩個表

Table1 
id_tb1 | tb1field 
1   aaa 
2   bbb 
3   ccc 
4   ddd 
5   eee 

Table2 
id_stuff | id_tb1 
1   1 
1   4 
1   5 
2   1 
3   1 

什麼ID需要的是加入TB1和TB2而且從TB1列出的所有記錄。事情是這樣的:

Result 
id_tb1 | tb1field | tb2.id_stuff 
1   aaa   1 
2   bbb   NULL 
3   ccc   NULL 
4   ddd   1 
5   eee   1 

所以我這樣做:

SELECT t1.*, t2.id_stuff 
FROM Table1 t1 
LEFT JOIN Table2 t2 ON t2.id_tb1 = t1.id_tb1 
WHERE t2.id_stuff = 1 

但很明顯,這不是很好的解決方案。 有人有一個想法? Thx。

+0

爲什麼你認爲解決方案不好? – Kangkan

+0

你爲什麼認爲這不是一個好的解決方案? – n0nChun

+0

@Kangkan由於'WHERE t2.id_stuff = 1'刪除了其中't2.id_stuff'爲'NULL'的行。 – Barmar

回答

3

如果您在WHERE子句中的LEFT JOINed表上添加一個條件,這就好像您在哪裏做INNER JOIN一樣。

加入該條件到左連接

SELECT t1.*, t2.id_stuff 
FROM Table1 t1 
LEFT JOIN Table2 t2 ON t2.id_tb1 = t1.id_tb1 and t2.id_stuff = 1 
+0

當然!如此明顯,現在你說出來了!非常感謝 ! – AdrienXL

3

嘗試。

SELECT t1.*, t2.id_stuff 
FROM Table1 t1 
LEFT JOIN Table2 t2 ON t2.id_tb1 = t1.id_tb1 and t2.id_stuff = 1 
+0

謝謝!對不起,我只能選擇一個好回答:( – AdrienXL

相關問題