Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何编写只在满足所有条件时才返回外键的查询_Sql_Sql Server 2005_Sql Server 2008 R2 - Fatal编程技术网

Sql 如何编写只在满足所有条件时才返回外键的查询

Sql 如何编写只在满足所有条件时才返回外键的查询,sql,sql-server-2005,sql-server-2008-r2,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 现在我的问题是,我想对子表进行查询,只想找出所有状态都相同且状态应仅为open的SID 注意:在上面的示例中,我应该只有几个状态与SID相对,但是有多个状态。每次我想查询不同

我将父表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
现在我的问题是,我想对子表进行查询,只想找出所有状态都相同且状态应仅为open的SID

注意:在上面的示例中,我应该只有几个状态与SID相对,但是有多个状态。每次我想查询不同的状态

预期结果:
暂时,如果我将状态视为打开,那么SID 2只有在那里有所有打开状态的记录。p> 您可以通过聚合和
having
子句来实现这一点。假设
状态
从不为
,则以下操作有效:

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';

是的,就像Gordon说的,你需要使用聚合,你也可以使用计数:

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

min(状态)将为您提供第一个按字母顺序排列的解决方案。

我将通过min(状态)获得什么。那是查尔·菲尔德。@Bharagurbani。您将使用列/数据库/服务器排序规则指定的顺序获得最小值。这通常是按字母顺序排列的第一个。请解释min(status)将获取什么方法min(status)将获取第一个字母顺序的解决方案。