如何将关联不同字段的两条LEFT JOIN SQL查询合并为单条语句?
合并两次LEFT JOIN查询为单条SQL语句
你完全可以将这两条查询合并为一条语句,下面提供两种常用实现方式:
方法一:两次LEFT JOIN(别名区分表)
通过给Contagens表设置不同别名,分别基于EANU和EANP关联,直接获取两个字段的值:
SELECT Produto.NAME, IFNULL(c1.QTD, 0) AS QTD, IFNULL(c2.QTD, 0) AS ARM FROM Produto LEFT OUTER JOIN Contagens c1 ON Produto.EANU = c1.PRODUTO LEFT OUTER JOIN Contagens c2 ON Produto.EANP = c2.PRODUTO ORDER BY Produto.NAME;
这种方式逻辑清晰,适合每个关联条件对应唯一匹配行的场景,避免重复数据问题。
方法二:条件聚合(处理多匹配行场景)
如果Contagens表中同一个商品可能有多条匹配记录,可通过条件聚合合并结果:
SELECT Produto.NAME, IFNULL(SUM(CASE WHEN Produto.EANU = Contagens.PRODUTO THEN Contagens.QTD ELSE 0 END), 0) AS QTD, IFNULL(SUM(CASE WHEN Produto.EANP = Contagens.PRODUTO THEN Contagens.QTD ELSE 0 END), 0) AS ARM FROM Produto LEFT OUTER JOIN Contagens ON Produto.EANU = Contagens.PRODUTO OR Produto.EANP = Contagens.PRODUTO GROUP BY Produto.NAME ORDER BY Produto.NAME;
通过CASE WHEN筛选对应关联条件的QTD值,用SUM聚合后再处理空值,确保每个商品只返回一行结果。
内容的提问来源于stack exchange,提问作者Rafael Sousa
相关产品推荐
相关产品推荐

