SQL 两个 table LEFT JOIN 具有来自两个 table 的多个 WHERE 条件

SQL two table LEFT JOINs with multiple WHERE conditions from both tables

我不知道我的查询有什么问题,但过去几个小时我一直在用力揉脑袋。也许有人可以通过指出我的问题来提供帮助。

我正在尝试从 table 一个中获取匹配的成员,并使用下面的查询从两个 table 中的多个条件加入 table 两个,但它一直返回空字段或说行,即使我非常确定有匹配项:

SELECT s.name, s.gender, s.level, s.program, s.registered
     , s.available, s.dispic, c.staff, c.level, c.year, c.period
FROM students s
LEFT JOIN allots c ON s.level=c.level AND s.registered=1 AND s.available=0
WHERE c.staff=:staff
  AND c.year=:year
  AND c.period=:period
  AND c.level=:level
  AND c.subject:subject
ORDER BY s.name DESC;

所有的努力都被证明是错误的。

如果您使用 where 子句限制左联接的右侧,您实际上会将其更改为内部联接(因为您消除了右侧返回的空行)(有关详细信息,请参阅 this question ).不要在 where 子句中应用条件,而是将它们移动到连接谓词中。

这应该是你想要的:

SELECT s.name, s.gender, s.level, s.program, s.registered
     , s.available, s.dispic, c.staff, c.level, c.year, c.period
FROM students s
LEFT JOIN allots c ON s.level=c.level 
  AND c.staff=:staff
  AND c.year=:year
  AND c.period=:period
  AND c.level=:level
  AND c.subject=:subject
WHERE s.registered=1 AND s.available=0
ORDER BY s.name DESC;