我有两个表,第一个名为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
有什么要清除我对如何做到这一点的看法?非常感谢!
答案 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