【问题标题】:How to join to table2 if the table2 id in table1 is not null如果table1中的table2 id不为null,如何加入table2
【发布时间】:2017-11-17 01:58:32
【问题描述】:

我有 2 张桌子。如果 table1 中的 table2 id 不为空,我想获取 table1 中的所有数据和 table2 中的所有数据。 如果用户有 2 个地址,我想要 2 个表。

table1
id、姓名、电话、table2id
如果存在行,table2id 可以为 null 或来自 table2 的 id

table2
ID、地址、州、国家/地区

我有这个查询,但它不起作用。

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

根据我的阅读,我认为我可能需要一个子选择,或者 IF NOT NULL,但我不确定如何构造它们。 有什么想法吗?

【问题讨论】:

标签: mysql


【解决方案1】:

可能您的表结构不正确。最好将外键放在表 2 中,这样表 1 中的每条记录都可以有 N 个地址。

像这样:

Table1:id、姓名、电话
Table2:id、地址、州、国家/地区、table1id。

您可以使用LEFT JOIN 从 Table1 中选择所有记录,即使它在 Table2 中没有任何相关地址。

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

SELECT结果中Table2字段值为NULL的记录没有地址。

【讨论】:

  • 谢谢。是的,我想为一个用户提供多个地址。我没有正确考虑按键。
【解决方案2】:

您需要为此使用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'sLEFT JOIN 的 MySQL 文档。

【讨论】:

  • 感谢您的回答,但 Filipes 的回答是我真正需要做的。
【解决方案3】:

试试这个来解决它:

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

【讨论】:

  • 感谢您的回答,但 Filipes 的回答是我真正需要做的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-26
  • 1970-01-01
  • 2018-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多