SQL两个表LEFT JOIN与两个表中的多个WHERE条件

时间:2016-10-12 01:33:26

标签: mysql rows multiple-conditions

我不知道我的查询可能有什么问题,但过去几个小时我一直在努力。也许有人可能会帮我指出什么是错的。

我正在尝试从表1中获取匹配成员,并使用下面的查询从两个表中连接多个条件的表二,但它仍然返回空字段或说行,即使我确定有匹配:

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;

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

1 个答案:

答案 0 :(得分:2)

如果使用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;