2010-03-12 102 views
1

如果外部联接与条件匹配,则应从T1表返回至少一行。但是如果左外部联接成功执行联接又会如何发现另一个标准不满足呢?有没有办法让查询返回一个T1值和T2值设置为NULL的行?不返回T1中所有行的左外部联接

下面是具体的查询,我试图返回候选人列表,以及用户对这些候选人的支持,如果存在这样的支持。

SELECT c.id, c.name, s.support 
    FROM candidates c 
LEFT JOIN support s on s.candidate_id = c.id 
    WHERE c.office_id = 5059 
     AND c.election_id = 92 
     AND (s.user_id = 2 OR s.user_id IS NULL) --This line seems like the problem 
ORDER BY c.last_name, c.name 

查询联接考生和支持表,但发现它是谁支持这个候选人(USER_ID = 3,说)不同的用户。然后候选人从结果集中完全消失。

回答

2

难道你不能将条件从where语句移动到join语句吗?

LEFT JOIN support s on s.candidate_id=c.id and s.user_id = 2 
+0

工作完美。我以前从未使用过这种结构,但我会再次使用它。谢谢。 – Summer 2010-03-12 23:24:14