在第二个表上具有WHERE子句的LEFT OUTER JOIN,不影响第一个表

时间:2019-06-21 11:00:44

标签: mysql sql left-join where-clause

我正在尝试从两个表中返回一组记录。 我正在使用LEFT OUTER JOIN,因为我想要表1中的所有数据。 我只希望表2 JOINED中的数据满足特定的条件。

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

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之后删除不想要的数据?

2 个答案:

答案 0 :(得分:2)

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'

答案 1 :(得分:2)

只需将WHERE替换为AND就可以完全像LEFT [OUTER] JOIN一样使用。

例如

ON products.code = product_details.product_code
        AND product_details.detail_type = 'ALTERNATIVE NAMES'

否则查询将被视为INNER JOIN