如何编写一个只有满足所有条件才能返回外键的Query

时间:2013-12-16 15:31:03

标签: sql sql-server-2005 sql-server-2008-r2

我有父表A

**SID name**
1     ABC
2     XYZ
3     ZYK
.........

和子表B

SID Status
1   New
1   Open
1   Closed
2   Open
2   Open
3   New
3   Open
3   Closed
3   REJ

现在我的问题是我要针对子表触发查询,并且只想查找所有状态相同且状态应该只打开的SID。

注意:在上面的示例中,我应该只有少数针对SID的状态,但有多个状态。和eveytime我希望这个查询针对不同的状态。

预期结果: 对于时间如果我将状态视为开放,则SID 2仅存在具有打开状态的所有记录。

2 个答案:

答案 0 :(得分:1)

您可以使用聚合和having子句执行此操作。假设status永远不是NULL

,以下工作原理
select sid
from b
group by sid
having min(status) = max(status) and
       min(status) = 'open';

如果您有NULL个值,则可以使用此having子句:

having count(*) = count(status) and
       min(status) = max(status) and
       min(status) = 'open';

答案 1 :(得分:0)

是的,就像Gordon说你需要使用聚合一样,你也可以使用count:

SELECT sid
from b
Group by sid
having count(Distinct status)=1 and min(status)='open'

min(status)将为您提供第一个字母解决方案。