Sql 基于两列查找重复项的查询
我有一个场景,我们需要根据两个不同的列识别重复记录。例如,如果COLA中存在重复记录,则不应考虑这些记录,COLB的情况也是如此。但是在重复的时候,我们不应该把可乐和可乐放在一起。副本应单独考虑。我的输入表如下所示 输入表 预期产出Sql 基于两列查找重复项的查询,sql,db2,Sql,Db2,我有一个场景,我们需要根据两个不同的列识别重复记录。例如,如果COLA中存在重复记录,则不应考虑这些记录,COLB的情况也是如此。但是在重复的时候,我们不应该把可乐和可乐放在一起。副本应单独考虑。我的输入表如下所示 输入表 预期产出 我正在考虑使用两个单独的查询编写一个分组查询,然后进行联合。但我只想检查其他任何简单的方法来找到它。您可以使用窗口功能: select t.* from (select t.*, count(*) over (partition by c
我正在考虑使用两个单独的查询编写一个分组查询,然后进行联合。但我只想检查其他任何简单的方法来找到它。您可以使用窗口功能:
select t.*
from (select t.*,
count(*) over (partition by cola) as cola_cnt,
count(*) over (partition by colb) as colb_cnt
from table t
) t
where cola_cnt = 1 and colb_cnt = 1;
我们可以在这里尝试使用exists逻辑:
SELECT COLA, COLB, COLD
FROM yourTable t1
WHERE
NOT EXISTS (SELECT 1 FROM yourTable t2
WHERE (t2.COLA = t1.COLA AND t2.PK <> t1.PK) OR
(t2.COLB = t1.COLB AND t2.PK <> t1.PK));
这里我假设您的表有一些主键列PK。如果没有,请添加它。假设COLD值总是唯一的,您可能可以使用COLD代替PK。这适用于您的场景
select COLA,COLB,COLD from test
where COLB not in (select COLB from test group by COLB having (count(COLB) >1))
group by COLA having (count(COLA) =1);