如果值不存在,查找记录?

时间:2011-10-18 16:01:49

标签: mysql sql database

我遇到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。

3 个答案:

答案 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