我遇到SQL查询问题。
我想在StatusID = 1
表中找到records
,如果StatusID = 2
不存在。
我尝试过查询:
SELECT * FROM records AS A
LEFT JOIN records AS B on B.StoreID = A.StoreID
WHERE A.StatusID = 1 AND B.StatusID != 2
即使StatusID = 2
存在,它仍会显示结果。
注意:StoreID
是记录表中的ref id。
答案 0 :(得分:7)
您想使用NOT EXISTS
:
SELECT *
FROM records AS A
WHERE A.StatusID = 1
AND NOT EXISTS (select B.StoreID
from records AS B
where B.StoreID = A.StoreIDB
and B.StatusID = 2)
答案 1 :(得分:0)
承担非空StatusID字段(始终填写):
SELECT * FROM records AS A
LEFT JOIN records AS B
on B.StoreID = A.StoreID
and B.StatusID = 2
WHERE A.StatusID = 1 AND B.StatusID IS NULL
答案 2 :(得分:0)
即使StatusID = 2存在,你仍然会看到结果,因为你正在使用LEFT JOIN
,你会记得它会返回整个左集和来自右集的所有匹配条目或NULL哪里都不存在。
对我而言,最简单的解决方法是使用INNER JOIN
,因为LEFT JOIN
将返回INNER JOIN
不会返回的情况,StatusID将不等于1和2。 / p>
因此:
select * from records a
inner join records b
on b.storeid = a.storeid
where a.statusid = 1
and b.statusid <> 2