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

时间:2011-03-18 16:06:25

标签: mysql

我有一个具有多对多关系的MySQL应用程序。我的主表是我的材料表。在我的所有其他表中,我有一个material_id来匹配表ID。因此,在我的供应商表中,我有supplier_idmaterial_id.

对于此应用,某些材料没有供应商。为了使我的SQL SELECT语句正确返回该材料没有供应商,我是否应该为supplier_id添加一个NULL条目以匹配material_id?或者SQL JOIN语句不会返回结果,我可以在PHP中相应地编写脚本吗?

3 个答案:

答案 0 :(得分:1)

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

您需要outer join,例如

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

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

答案 1 :(得分:0)

您无需填充NULL。你想要的是outer join。来自维基百科:

  

左外连接的结果(或   表A和B只是左连接   始终包含所有记录   “左”表(A),即使   join-condition没有找到任何   匹配“右”表中的记录   (B)。这意味着如果是ON子句   匹配B中的0(零)记录   join仍将返回一行   结果 - 但每列中为NULL   从B.这意味着左外   join返回来自的所有值   左表,加上匹配的值   正确的表(如果没有,则为NULL)   匹配连接谓词)。

答案 2 :(得分:-1)

  

...我应该有一个NULL条目   那个supplier_id来匹配   material_id?或者是SQL JOIN   声明没有返回结果和我   可以在PHP中编写相应的脚本吗?

两者。都不是。

“null”的含义是“我没有关于此的信息”。如果没有供应商,那么合乎逻辑的做法是将列保留为“空”。

但是,鉴于您正在谈论代表多对多关系的“连接表”,最好的办法是不要在连接表中插入记录。毕竟,从逻辑上讲,缺少记录显示与供应商没有任何关系。

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