2017-04-26 57 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

相关问题