SQL,通过在一列中重复进行选择,但如果其他列中也有 1:1 重复则排除

问题描述 投票:0回答:1

我需要从一列中选择具有重复项的值,但排除在其他列中也具有重复项的值。使用 SQLite。需要合理优化查询。

示例表:

文件 校验和
2 1
3 1
4 2
4 2
5 3
5 3
6 3

SQL:

CREATE TABLE t1 (
    file    INT,
    checksum    VARCHAR(512)
);

INSERT INTO t1 (file, checksum) VALUES
    ('2', '1'),
    ('3', '1'),
    ('4', '2'),
    ('4', '2'),
    ('5', '3'),
    ('5', '3'),
    ('6', '3');

我最终提出疑问:

select checksum from t1
         where file not in (select file from t1 group by file having count(file) > 1)
         group by checksum
         having count(checksum) > 1

但它不选择

checksum=3

sqlfiddle

sql sqlite
1个回答
0
投票

由于您已经使用

where file not in (select file from t1 group by file having count(file) > 1)
进行过滤,然后按
checksum
进行分组,因此您不需要使用
having count(checksum) > 1
进一步过滤。 由于您似乎期望返回 1 和 3,因为它们是唯一具有重复项的校验和,因此我能够使用 sqlfiddle 获得您想要的结果。

© www.soinside.com 2019 - 2024. All rights reserved.