我有父表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仅存在具有打开状态的所有记录。
答案 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)将为您提供第一个字母解决方案。