SQL查询按状态筛选

时间:2016-08-18 20:26:11

标签: sql

我有以下几种表格:

id      status      iteration  
----    -------     ----------  
1111    1           1  
1111    3           2  
1111    4           3  
1112    1           1  
1113    1           1  
1113    4           2  
1114    1           1  

我面临的问题是尝试使用状态为1或3的ID进行查询。如果状态为4,我们应该从查询中删除该ID。

我做了以下查询,但我似乎只能获得1或3的结果。如果相同的ID状态为4,我无法将其过滤掉。

Select id,status, iteration
from table
WHERE status IN (1,3) ;

非常感谢任何帮助

3 个答案:

答案 0 :(得分:3)

我认为这就是你想要的:

SELECT id, status, iteration
FROM table
WHERE id NOT IN (SELECT id FROM table WHERE status=4)

......这只是排除了4的。如果你真的只想要1和3并排除其他一切:

SELECT id, status, iteration
FROM table
WHERE id NOT IN (SELECT id FROM table WHERE status NOT IN (1, 3))

感谢@sstan在第二个例子中捕获了一些错误的逻辑!

答案 1 :(得分:0)

这应该会给你预期的结果:

select *
from table t1
where status in (1,3)
and not EXISTS
(
    select * from table t2 where t2.id = t1.id and t2.status = 4
)

答案 2 :(得分:0)

查询可能需要根据您要查找的Sql版本进行更改,但如果我了解您的要求,则只希望根据您所描述的内容返回1112和1114记录。如果这是正确的,这是我的查询请求版本。

选择ID,状态,迭代 从表 其中Id不在(从Status = 4的表中选择Id)