MySQL - 为什么 WHERE 忽略 RIGHT JOIN?

MySQL - Why does WHERE ignore RIGHT JOIN?

我有以下 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 信息?

提前致谢。

你想要的是:

RIGHT JOIN reel_classes AS class
    ON item.class_id = class.class_id AND
       inv.current_length  > 0;

您的问题是为什么 RIGHT JOIN 变成带有 WHERE 子句的 INNER JOIN

原因很简单。对于不匹配的行,inv.current_lengthNULL 并且比较失败。

我还建议您使用 LEFT JOIN,从要保留所有行的 table 开始。大多数人发现更容易理解“将所有行保留在第一个 table 中”而不是“将所有行保留在某个 table 中,其名称将出现”。