Mysql 对于不存在的ID,SQL表中是否需要空值

Mysql 对于不存在的ID,SQL表中是否需要空值,mysql,Mysql,我有一个MySQL应用程序,它具有多对多关系。我的主表是我的材料表。在我的所有其他表中,我都有一个与表id匹配的物料id。因此,在我的供应商表中,我有供应商id和物料id 对于这种应用,有些材料没有供应商。为了让我的SQL SELECT语句正确返回该物料没有供应商,我是否应该为该供应商id输入NULL以匹配物料id?或者SQL JOIN语句不会返回结果,我可以在PHP中编写相应的脚本?我甚至不会为映射创建空条目 你需要一个 select * from materials m left outer

我有一个MySQL应用程序,它具有多对多关系。我的主表是我的材料表。在我的所有其他表中,我都有一个与表id匹配的物料id。因此,在我的供应商表中,我有供应商id和物料id

对于这种应用,有些材料没有供应商。为了让我的SQL SELECT语句正确返回该物料没有供应商,我是否应该为该供应商id输入NULL以匹配物料id?或者SQL JOIN语句不会返回结果,我可以在PHP中编写相应的脚本?

我甚至不会为映射创建空条目

你需要一个

select * from materials m left outer join suppliers s on (m.material_id=s.material_id);

它将自动为供应商返回空值。

您不需要填充空值。你想要的是一个。来自维基百科:

左外联接或左外联接的结果 表A和B的简单左连接 始终包含该文件的所有记录 左表A,即使 联接条件找不到任何连接 匹配右表中的记录 B.这意味着如果ON条款 匹配B中的0个零记录 join仍将返回中的一行 结果,但每列中都有NULL 从B。这意味着左外 join返回来自 左表,加上来自的匹配值 正确的表格,如果没有,则为NULL 匹配连接谓词

…我是否应该为 该供应商的id与 材料标识?或者SQL会加入吗 语句不返回结果,我 可以在我的PHP中编写相应的脚本吗

两者都有。都不是

null的意思是我没有这方面的信息。如果没有供应商,那么合乎逻辑的做法是将列保留为空

但是,考虑到您正在谈论的是表示多对多关系的联接表,最好不要在联接表中插入记录。毕竟,从逻辑上讲,没有记录表明与供应商没有关系


在查询时,您可能需要一个外部联接,以使其能够正常工作,但是…

我不建议将NULL作为映射中的id,以指示关系的一侧未被统计。这是肮脏和不必要的数据。映射中的一行应该只有在供应商确实存在的情况下才存在。非常正确-我没有正确阅读它。如果是多对多,就不要在关系表中放入记录。