如何关联多表并保留New_item全量数据?LEFT JOIN失效排查
问题解决:LEFT JOIN后New_item表新条目未显示的修复
问题出在你的WHERE子句里的Color.MPG = Price.MPG条件——虽然用了LEFT JOIN,但这个条件会过滤掉Color或Price表没有匹配记录的New_item条目。因为LEFT JOIN后,无匹配的Color.MPG或Price.MPG会是NULL,NULL和任何值比较的结果都是不成立,导致这些新条目被排除。
正确的做法是把Color.MPG = Price.MPG这个跨表关联条件移到对应的JOIN ON子句中,同时保留New_item.Entry_Date的过滤条件(这个条件只针对主表New_item,不会过滤掉需要的记录)。
修改后的SQL语句如下:
SELECT New_item.Artikol_tkt , New_item.Shade , Artikol.Description , Color.MPG , Artikol.Supplier , Artikol.BUoM , Artikol.Net_weight , Price.Purchase_Price , Supplier.Freight , New_item.Entry_Date FROM (((New_item LEFT JOIN Artikol ON New_item.Artikol_tkt = Artikol.Artikol_tkt) LEFT JOIN Supplier ON Artikol.Supplier = Supplier.Supplier) LEFT JOIN Price ON New_item.Artikol_tkt = Price.Artikol_tkt) LEFT JOIN Color ON New_item.Shade = Color.Shade AND Color.MPG = Price.MPG WHERE New_item.Entry_Date = CDate('25/10/2022');
如果Price表也可能没有匹配记录,为了避免Price.MPG为NULL导致Color的JOIN条件不生效,可以用COALESCE函数处理NULL值(比如COALESCE(Color.MPG, '') = COALESCE(Price.MPG, '')),但上面的修改已经能解决新条目不显示的核心问题——确保主表New_item的所有符合Entry_Date条件的记录都被保留,不管其他表是否有匹配。
内容的提问来源于stack exchange,提问作者Zqm
相关产品推荐
相关产品推荐

