在sql中使用exists来查找重复项,有没有更干净的方法?
Posted
技术标签:
【中文标题】在sql中使用exists来查找重复项,有没有更干净的方法?【英文标题】:Uisng exists in sql to find duplicates, is there a cleaner way? 【发布时间】:2016-07-04 13:32:43 【问题描述】:请参阅下面的脚本以查找 SQL Server DB 中的重复项。有没有更清洁的方法?
select itemnum
from matusetrans a
where exists (select null
from matusetrans b
where a.itemnum = b.itemnum
and a.actualdate = b.actualdate
and a.matusetransid != b.matusetransid
and (a.rotassetnum = b.rotassetnum
or (a.rotassetnum is null and b.rotassetnum is null))
and a.quantity = b.quantity)
group by itemnum
【问题讨论】:
请明确定义“重复”。您是指行中所有列都匹配的两条记录吗? 嗨,Mfusiki,是的,在代码中的条件匹配且计数大于 1 处重复。 请参考本帖:***.com/questions/2594829/… 有了这个线程,我无法识别唯一的 itemnum。 按照@Mfusiki 的建议,使用 GroupBy 和 Have 子句 【参考方案1】:你可以试试:
SELECT itemnum
FROM matusetrans
GROUP BY [ColumnNames]
HAVING
COUNT(*) > 1
【讨论】:
【参考方案2】:假设您想在表中查找重复的 itemnum,请使用以下查询
SELECT itemnum
FROM matusetrans
GROUP BY [ItemNum]
HAVING COUNT(ItemNum) > 1
使用HAVING COUNT(*) > 1
可能会给您带来结果,因为如果有任何Datetime
列(如订单日期时间),每个记录通常会有所不同,那么所有结果都是不同的。
谢谢, 斯里
【讨论】:
【参考方案3】:另一种可能性(但不一定是“更干净”)可能是
WITH cte AS(
SELECT columns, ROW_NUMBER() OVER (PARTITION BY columns ORDER by columns) AS RowIdx
FROM matusetrans
GROUP BY columns
)
SELECT *
FROM cte
WHERE RowIdx > 1
【讨论】:
以上是关于在sql中使用exists来查找重复项,有没有更干净的方法?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Not exists SQL ORACLE 避免列重复
2022-11-29:查找重复的电子邮箱。以下数据中a@b.com是重复的,请写出sql语句。 DROP TABLE IF EXISTS person; CREATE TABLE person (