[英]sql query find missing value from duplicates
我有一张这样的桌子:
|__ID__|__Key__|__Value__|
| 1 | AA | 2 |
| 2 | AA | 2 |
| 2 | BB | 2 |
| 2 | CC | 2 |
| 3 | BB | 2 |
| 3 | AA | 2 |
我正在尝试建立一个查询,以检查哪些ID缺少键BB。
因此,在上面的示例中,我会对结果感到厌烦
|__ID__|
| 1 |
我曾尝试在StackOVerflow和其他站点上搜索类似的问题,但我总是最终得到列出没有ID BB的所有ID行的结果。 在上面的示例中,我将得到1,2,2,3。
您需要根据数据集中没有的值来过滤数据集,通常最好使用not exists
:
declare @t table (id int,keys varchar(50),value int);
insert into @t values (1,'AA',2),(2,'AA',2),(2,'BB',2),(3,'AA',2),(3,'BB',2);
select t1.id
from @t as t1
where not exists(select id
from @t as t2
where keys = 'BB'
and t1.id = t2.id
);
+----+
| id |
+----+
| 1 |
+----+
您可以通过多种方式来实现。 其中之一是选择具有密钥BB的ID,该ID很简单,然后从完整的ID中减去:
SELECT DISTINCT ID FROM Table1 WHERE ID NOT IN
(SELECT ID FROM Table1 WHERE [Key] = 'BB')
这是显示上述解决方案的SQLFiddle: http ://www.sqlfiddle.com/#!18/47db9 /6
在此SO问题中可以找到其他解决方法: SQL:如何仅选择不包含特定值的组?
要搜索您需要尝试的内容,例如:“如何选择不包含某个元素的组”,因为原则上您希望按ID对元素进行分组,即使我们不使用GROUP BY语句来解决它
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.