SQL Server-如何检查同一表中相同列值的其他行中是否不存在值?

SQL Server-如何检查同一表中相同列值的其他行中是否不存在值?,sql,sql-server,Sql,Sql Server,以下是SQL Server中的两个表:表A和表B 我需要得到如下输出: 从Exist=0的表中获取ID 我们将得到100、101和102 现在,在100、101和102中,同一个表中没有其他具有相同ID值的行存在=1 因此,无法选择100,因为它在第二行中存在=1 因此,只剩下101和102个 对于剩余的ID值101和102,对照表_B中的ID列进行检查,其中“Exist”列值不应等于任何行中的“1” 在表_B中,第4行已存在=1表示102。所以,这不能被选择 我们现在只有101个。这是必需的输

以下是SQL Server中的两个表:表A和表B

我需要得到如下输出:

从Exist=0的表中获取ID

我们将得到100、101和102

现在,在100、101和102中,同一个表中没有其他具有相同ID值的行存在=1

因此,无法选择100,因为它在第二行中存在=1

因此,只剩下101和102个

对于剩余的ID值101和102,对照表_B中的ID列进行检查,其中“Exist”列值不应等于任何行中的“1”

在表_B中,第4行已存在=1表示102。所以,这不能被选择

我们现在只有101个。这是必需的输出,应该选择

您能告诉我如何编写最简单的查询来实现这一点吗?如果问题需要改进,请告诉我。

试试:

SELECT
    ID,
    SUM(CAST(Exist AS int)) AS [Exists]
FROM
    TABLE_A
GROUP BY ID
HAVING SUM(CAST(Exist AS bit)) = 0
我会给你第一部分的答案。然后,您可以将其连接到表_B的类似查询中。这是一种简单的方式来显示其工作原理。您可以编写更复杂的查询,如@Yogest Sharma中的查询,请尝试:

SELECT
    ID,
    SUM(CAST(Exist AS int)) AS [Exists]
FROM
    TABLE_A
GROUP BY ID
HAVING SUM(CAST(Exist AS bit)) = 0
我会给你第一部分的答案。然后,您可以将其连接到表_B的类似查询中。这是一种简单的方式来显示其工作原理。您可以编写更复杂的查询,如@Yogest Sharma中的查询,您可以使用exists¬ exists:

您可以使用exists¬exists:


如@Peter Smith所述,您可以使用聚合函数SUM。请注意,由于不能在具有位数据类型的字段上使用聚合函数,因此需要强制转换

;WITH CTE AS
(
SELECT ID, SUM(CAST(Exist AS INT)) AS AggExist FROM TABLE_A GROUP BY ID
UNION
SELECT ID, SUM(CAST(Exist AS INT)) As AggExist FROM TABLE_B GROUP BY ID
)
SELECT ID, SUM(AggExist) FROM CTE GROUP BY ID
HAVING SUM(AggExist) = 0

这里是

如@Peter Smith所述,您可以使用聚合函数SUM。请注意,由于不能在具有位数据类型的字段上使用聚合函数,因此需要强制转换

;WITH CTE AS
(
SELECT ID, SUM(CAST(Exist AS INT)) AS AggExist FROM TABLE_A GROUP BY ID
UNION
SELECT ID, SUM(CAST(Exist AS INT)) As AggExist FROM TABLE_B GROUP BY ID
)
SELECT ID, SUM(AggExist) FROM CTE GROUP BY ID
HAVING SUM(AggExist) = 0

这是

你能展示一下你到目前为止所做的尝试吗。你试过什么了吗?列数据类型是什么?ID是int,Exist是bitI尝试过的,但一直在检查同一个表中Exist=1的其他行。能否显示您迄今为止尝试过的内容。你试过什么了吗?列数据类型是什么?ID是int,Exist是bitI尝试过的,但仍然无法检查同一个表中Exist=1的其他行谢谢。它奏效了;将cte设置为选择一。*从表a中选择一个,其中存在一个从表a中选择一个,其中两个.id=1.id和两个.exist=0且不存在从表a中选择一个,其中两个.id=1.id和两个.exist=1,从不存在的cte中选择一个从表b中选择一个,其中cte.id=b.id和b.exist=1;非常感谢。它奏效了;将cte设置为选择一。*从表a中选择一个,其中存在一个从表a中选择一个,其中两个.id=1.id和两个.exist=0且不存在从表a中选择一个,其中两个.id=1.id和两个.exist=1,从不存在的cte中选择一个从表b中选择一个,其中cte.id=b.id和b.exist=1;