2017-04-26 114 views
0

我有2個表格。如果table1中的table2 id不爲null,我想從table1獲取所有數據,並從table2獲取所有數據。 我想要2個表,以防用戶有2個地址。如何加入table2如果table1中的table2 id不爲null

表1
ID,姓名,電話,table2id如果行存在

表2
table2id可以從表2爲空或ID:
ID,地址,州,國家

我有這個查詢,但它不起作用。

SELECT * FROM `table1` JOIN `table2` ON `table1`.`table2id` = `table2`.`id` WHERE `table1`.`id` = '2' AND `table1`.`table2id` IS NOT NULL 

從我讀過的,我想我可能需要一個子選擇或IF NOT NULL,但我不知道如何構造它們。 任何想法?

+0

Duplicate http://stackoverflow.com/questions/23582387/mysql-join-if-field-is-not-null – Bram

回答

1

也許你的表結構不正確。這將是更好地爲您把在表2中的foreing鍵,這樣你就可以在表中有N個地址,每個記錄1.

像這樣:

表1:ID,姓名,電話
表2:ID,地址,州,國家,table1id。

通過這種方式,您可以使用LEFT JOIN從Table1中選擇所有記錄,即使它沒有任何與Table2相關的地址。

SELECT * 
FROM TABLE1 
LEFT JOIN TABLE2 ON (TABLE1.ID = TABLE2.TABLE1ID) 

具有與NULL值犯規表2的域設置SELECT結果的記錄有任何地址。

+0

謝謝。是的,我想爲一個用戶提供多個地址。我沒有用鑰匙正確地考慮它。 – Cambo

0

嘗試使用此方法解決這個問題:

SELECT * FROM table1 LEFT JOIN table2 ON table1.table2id = table2.id WHERE table1.id = '2'; 
+0

感謝您的回答,但Filipes答案是我真正需要做的。 – Cambo

0

您需要使用LEFT JOIN爲,例如:

SELECT t1.id, t1.name, t1.phone, t2.address, t2.state, t2.country 
FROM table1 t1 LEFT JOIN table2 t2 ON t1.table2id = t2.id 
WHERE t1.id = 2; 

它將返回空值t2.*列,如果沒有匹配的行。

Here's關於LEFT JOIN的MySQL文檔。

+0

感謝您的回答,但Filipes的答案是我真正需要做的。 – Cambo

相關問題