我有以下几种表格:
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) ;
非常感谢任何帮助
答案 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)