【发布时间】:2020-06-10 13:38:34
【问题描述】:
我有 3 张桌子:
TableA - Id, TableB_id
TableB - Id, Name, TableC_id
TableC - Id, Valid
有效值可以是 0 或 1。
TableA -> TableB 和 TableB -> TableC 之间存在一对多的关系。
我想获取 TableC.valid = 0 的 TableA 和 TableB 的所有记录。
另外,来自 TableA 和 TableB 的记录,即使 TableC 中没有关联的记录。
我已经为第一部分编写了查询,但是如何包含第二个条件? (如果可能,不使用联合)
查询:
Select
a.id,
b.id,
b.name,
c.id
from
TableA a
left join TableB b on a.TableB_id = b.id
left join TableC c on b.TableC_id = c.id
where
c.valid = 1;
【问题讨论】:
-
执行
left join TableC c on b.TableC_id = c.id AND c.valid = 1;以获得真正的 LEFT JOIN 结果。 -
谓词
c.valid = 1击败了左连接,有效地将它们转换为内连接。将该谓词放在ON子句中,而不是WHERE子句中。