首页 > 解决方案 > LEFT OUTER JOIN 与第二张表上的 WHERE 子句,不影响第一张表

问题描述

我正在尝试从两个表中返回一组记录。我正在使用LEFT OUTER JOIN,因为我想要表 1 中的所有数据。JOINED如果满足某个子句,我只想要表 2 中的数据。

LEFT OUTER JOIN如果表 2 中的记录不符合该子句,则该子句似乎覆盖并且不返回表 1 中的记录WHERE

SELECT p.code, p.name, d.product_code, d.detail_type, d.description
  FROM products p
  LEFT OUTER JOIN product_details d
    ON p.code = d.product_code 
 WHERE product_details.detail_type = 'ALTERNATIVE NAMES'

我希望返回产品中的所有行,但我只希望product_details在以下情况下加入行product_details.detail_type = 'ALTERNATIVE NAMES'

我正在寻找一些关于这是否可能的指导,或者我是否应该在初始之后去除不需要的数据JOIN

标签: mysqlsqlleft-joinwhere-clause

解决方案


使用product_details.detail_type = 'ALTERNATIVE NAMES'条件ON Clause代替where Clause

SELECT products.code, products.name, product_details.product_code, product_details.detail_type, product_details.description
FROM products 
LEFT OUTER JOIN product_details 
ON products.code = product_details.product_code 
and product_details.detail_type = 'ALTERNATIVE NAMES'

推荐阅读