繁体   English   中英

sql查询从重复项中找到丢失的值

[英]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 |
+----+

就像我在评论中说的,我个人会使用HAVING

SELECT ID
FROM YourTable 
GROUP BY ID
HAVING COUNT(CASE WHEN [Key] = 'BB' THEN 1 END) = 0;

DB <>为相信这是行不通的人摆弄

您可以通过多种方式来实现。 其中之一是选择具有密钥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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM