我有一个具有多对多关系的MySQL应用程序。我的主表是我的材料表。在我的所有其他表中,我有一个material_id
来匹配表ID。因此,在我的供应商表中,我有supplier_id
和material_id.
对于此应用,某些材料没有供应商。为了使我的SQL SELECT
语句正确返回该材料没有供应商,我是否应该为supplier_id
添加一个NULL条目以匹配material_id
?或者SQL JOIN
语句不会返回结果,我可以在PHP中相应地编写脚本吗?
答案 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”的含义是“我没有关于此的信息”。如果没有供应商,那么合乎逻辑的做法是将列保留为“空”。
但是,鉴于您正在谈论代表多对多关系的“连接表”,最好的办法是不要在连接表中插入记录。毕竟,从逻辑上讲,缺少记录显示与供应商没有任何关系。
您可能需要一个外部联接,以便在查询时使其全部正常工作,但是......