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;
我不知道我的查询有什么问题,但过去几个小时我一直在用力揉脑袋。也许有人可以通过指出我的问题来提供帮助。
我正在尝试从 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;