ID Foreign_ID Number Status_Id
1 101 xyz11 3
2 101 xyz22 3
3 201 xyz33 3
4 201 xyz44 1
5 201 xyz55 7
6 301 xyz66 1
7 301 xyz77 7
8 301 xyz88 7
Status_Id,3表示有效,1表示已取消,7表示已撤销 我想选择只有status_id 1或7且不应有任何活动行的行。该查询应仅返回301(Foreign_ID)行。
答案 0 :(得分:0)
您可以尝试以下代码:
Select *
From Yourtablename
Where Status_Id in (1, 7)
AND Foreign_ID = 301;
答案 1 :(得分:0)
使用not exists
:
select *
from table t
where not exists (
select 1 from table where Foreign_ID = t.Foreign_ID and Status_Id = 3
);
这称为相关subquery
,其中subquery
依赖于外部查询,如果外部查询表有3行,则subquery
将执行3次。
在您的情况下,子查询具有status_id = 3
的过滤器,这意味着它将仅选择status_id = 3的行等等,外部查询具有NOT EXISTS
过滤器,这意味着它将选择行status_id <> 3
。
答案 2 :(得分:0)
我必须承认,也许我还没有完全理解你的要求, 但这应该有效:
SELECT * FROM table WHERE (Status_Id=1 OR Status_Id=7) AND Foreign_ID=301
答案 3 :(得分:0)
抱歉,我仍然无法发表评论。
如果我错了,请更正我,你想查询status_id
1或7,然后在结尾时你说你只想获得foreign_id
301?
SELECT * FROM YOURTABLE WHERE Foreign_ID = 301
这将显示具有Foreign_ID = 301
如果您只想显示Foreign_ID
列Status_Id
1或7
SELECT Foreign_ID FROM YOURTABLE WHERE Status_Id IN (1, 7)
或者您的301 Foreign_ID
还包含Status_Id
1?对不起,我在你的陈述结束时丢失了,还有你的桌子数据。
如果没有,Aurete的答案将满足您的条件。