MySQL查询两张表时LEFT JOIN返回多余NULL行如何解决?
问题原因分析
问题出在LEFT JOIN的逻辑特性上:
LEFT JOIN会完整保留左表(此处为tbl_1)中所有符合WHERE条件的行,哪怕右表tbl_2没有匹配到对应invoiceID的记录,也会返回tbl_2所有字段为NULL的行,这就是多余NULL行的来源。
修复方案
根据需求可选两种修复方式:
方案1:改用INNER JOIN(更推荐)
INNER JOIN只会返回两张表按关联条件匹配成功的行,自动过滤掉右表无匹配的NULL行,再加LIMIT 2限制返回前2行即可。
SELECT `tbl_2`.* FROM `tbl_1` INNER JOIN `tbl_2` ON `tbl_1`.invoiceID = `tbl_2`.invoiceID WHERE `tbl_1`.customerID = "463" LIMIT 2;
方案2:保留LEFT JOIN,新增非空过滤条件
如果有特殊场景必须保留LEFT JOIN的逻辑,可以在WHERE子句中增加右表非空判断,再限制返回行数:
SELECT `tbl_2`.* FROM `tbl_1` LEFT JOIN `tbl_2` ON `tbl_1`.invoiceID = `tbl_2`.invoiceID WHERE `tbl_1`.customerID = "463" AND `tbl_2`.invoiceID IS NOT NULL LIMIT 2;
内容的提问来源于stack exchange,提问作者Trombone0904
相关产品推荐
相关产品推荐

