我有2张桌子。如果table1中的table2 id不为null,我想获取table1中的所有数据和table2中的所有数据。 如果用户有2个地址,我想要2个表。
表1 :
id,name,phone,table2id
如果存在行,table2id可以为null或来自table2的id
表2 :
身份,地址,州,国家
我有这个查询,但它不起作用。
SELECT * FROM `table1` JOIN `table2` ON `table1`.`table2id` = `table2`.`id` WHERE `table1`.`id` = '2' AND `table1`.`table2id` IS NOT NULL
根据我的阅读,我想我可能需要一个子选择,或IF NOT NULL,但我不知道如何构造它们。 有什么想法吗?
答案 0 :(得分:1)
也许您的表结构不正确。将exing键放在表2中会更好,所以你可以在表1的每条记录上有N个地址。
像这样:
表1 :ID,姓名,电话
表2 :ID,地址,州,国家/地区,table1id。
使用它可以使用LEFT JOIN
来选择Table1中的所有记录,即使它没有表2中的任何相关地址。
SELECT *
FROM TABLE1
LEFT JOIN TABLE2 ON (TABLE1.ID = TABLE2.TABLE1ID)
具有NULL值的Table2字段的SELECT
结果的记录没有任何地址。
答案 1 :(得分:0)
试试这个来解决它:
SELECT * FROM table1 LEFT JOIN table2 ON table1.table2id = table2.id WHERE table1.id = '2';
答案 2 :(得分: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
。