mysql,当join equals null时,选择满足join和column值的行

时间:2015-10-14 11:17:00

标签: mysql null left-join

我有两个表,第一个名为staff id,name,defaultSel,第二个名为staffRels,列id,staffID等。我想从staff表中选择那些在staffRels表中存在的行那些没有出现在staffRels表中但是defaultSel列设置为1的那些。到目前为止我有以下但是结果不是很好,给了我一大堆行,我不想要或者更少取决于如何我在where子句中格式化了大小写。

SELECT staff.id, staff.name FROM staff 
LEFT JOIN staffRels 
ON staff.id = staffRels.staffID 
WHERE CASE staffRels.id WHEN null THEN staff.defaultSel=1 ELSE staff.defaultSel=0 END 

有什么要清除我对如何做到这一点的看法?非常感谢!

2 个答案:

答案 0 :(得分:0)

我认为这是你想要的逻辑:

SELECT s.id, s.name
FROM staff s LEFT JOIN
     staffRels sr
     ON s.id = sr.staffID 
WHERE (sr.id IS NOT NULL) OR (s.defaultSel = 1) ;

这有可能重复。您可能更喜欢:

SELECT s.*
FROM staff s
WHERE s.defaultSel = 1 OR
      EXISTS (SELECT 1 FROM staffRels sr WHERE s.id = sr.staffID);

答案 1 :(得分:0)

将案例放入select子句中。

SELECT staff.id, staff.name,CASE staffRels.id WHEN null THEN staff.defaultSel=1 ELSE staff.defaultSel=0 END as staff.defaultSelFROM staff 
LEFT JOIN staffRels 
ON staff.id = staffRels.staffID