【发布时间】:2021-11-12 13:09:06
【问题描述】:
我有以下 MySQL 查询:
SELECT inv.inventory_id, inv.item_id, item.description, inv.quantity, item.class_id, class.description AS class,
class.is_spool, inv.location_id, location.description AS location, location.division_id, division.name AS division,
inv.service_date, inv.reel_number, inv.original_length, inv.current_length, inv.outside_sequential,
inv.inside_sequential, inv.next_sequential, inv.notes, inv.last_modified, inv.modified_by
FROM reel_inventory AS inv
INNER JOIN reel_items AS item ON inv.item_id = item.item_id
INNER JOIN reel_locations AS location ON inv.location_id = location.location_id
INNER JOIN locations AS division ON location.division_id = division.location_id
RIGHT JOIN reel_classes AS class on item.class_id = class.class_id;
查询完全按预期工作。我试图做的是用一个限定符向这个查询添加一个 WHERE 子句。例如:
RIGHT JOIN reel_classes AS class ON item.class_id = class.class_id
WHERE inv.current_length > 0;
当我这样做时,来自 RIGHT JOIN 的所有结果都不包含在结果中。我没有丰富的高级查询经验,但是有人可以解释为什么在使用 WHERE 时将 RIGHT JOIN 从结果集中排除,以及如何属性编写查询以包含 RIGHT JOIN 信息?
提前致谢。
【问题讨论】:
-
LEFT JOIN ON 返回 INNER JOIN ON 行 UNION ALL 由 NULL 扩展的不匹配的左表行。同样对于 RIGHT JOIN ON 和右表行。作为 OUTER JOIN ON 的一部分,始终知道您想要什么 INNER JOIN ON。在 WHERE、INNER JOIN 或 HAVING 之后,需要右/左 [sic] 表列不为 NULL 会删除引入了 NULL 的行,即仅在行上留下 INNER JOIN,即“将 OUTER JOIN 转换为 INNER加入”。你有那个。 (如果您想找到更多答案,这个外连接问题的大多数重复项都是询问重新左连接。)
-
这是一个常见问题解答。请在考虑发布之前阅读手册和谷歌任何错误消息和许多清晰、简洁和准确的问题/问题/目标的措辞,带有和不带有您的特定名称/字符串/数字、“site:stackoverflow.com”和标签;阅读许多答案。反映你的研究。请参阅How to Ask、Help center 和投票箭头鼠标悬停文本。如果您发布问题,请使用一个措辞作为标题。
标签: mysql where-clause outer-join