【发布时间】:2019-06-21 11:00:44
【问题描述】:
我正在尝试从两个表中返回一组记录。
我正在使用LEFT OUTER JOIN,因为我想要表 1 中的所有数据。
如果满足某个子句,我只想要表 2 JOINED 中的数据。
如果表 2 中的记录不符合 WHERE 子句,则该子句似乎覆盖了 LEFT OUTER JOIN 并且不返回表 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.detail_type = 'ALTERNATIVE NAMES' 时加入来自 product_details 的行
我正在寻找一些关于这是否可能的指导,或者我是否应该在初始 JOIN 之后删除不需要的数据?
【问题讨论】:
-
这是一个常见问题解答。在考虑发布之前,请始终在谷歌上搜索任何错误消息以及您的问题/问题/目标的许多清晰、简洁和准确的措辞,包括和不包括您的特定字符串/名称;阅读许多答案。如果您发布问题,请使用一个短语作为标题。请参阅How to Ask 和投票箭头鼠标悬停文本。
-
了解 LEFT JOIN ON 返回的内容:INNER JOIN ON 行 UNION ALL 不匹配的左表行,由 NULL 扩展。作为 OUTER JOIN 的一部分,始终知道您想要什么 INNER JOIN。 WHERE 或 INNER JOIN ON 在 OUTER JOIN ON 删除任何由 NULL 扩展的行后,需要右 [sic] 表列不为 NULL,即只留下 INNER JOIN ON 行,即“将 OUTER JOIN 转换为 INNER JOIN”。你有那个。
标签: mysql sql left-join where-clause