我有一个表 Emp 其中有这样的记录
Id Name
1 A
2 B
3 C
1 A
1 A
2 B
3 C
Run Code Online (Sandbox Code Playgroud)
现在我想从表中删除重复行我正在使用此查询来选择或计算重复记录的数量
SELECT NameCol, COUNT(*) as TotalCount FROM TestTable
GROUP BY NameCol HAVING COUNT(*) > 1
ORDER BY COUNT(*) DESC
Run Code Online (Sandbox Code Playgroud)
我应该编写什么查询来删除表中的重复行。
如果我编写此查询来删除重复记录,那么它会给出结果(0) row Affected。
`DELETE FROM TestTable
WHERE ID NOT IN ( SELECT MAX(ID) FROM
TestTable
GROUP BY NameCol
)`
Run Code Online (Sandbox Code Playgroud) 我有这样的重复
col1, col2
1, alex
1, alex
2, liza
2, liza
3, peter
3, peter
Run Code Online (Sandbox Code Playgroud)
每个只有两个.我该如何删除重复项?
我想删除下表中的多个重复键:
id | name | uid
1 | ekta | 5
2 | ekta | 5
3 | sharma | 10
4 | sharma | 10
Run Code Online (Sandbox Code Playgroud)
希望它像
id | name | uid
1 | ekta | 5
3 | sharma | 10
Run Code Online (Sandbox Code Playgroud)
我正在使用mysql.可能吗?我无法使用 unique constraint查询来创建唯一的输入,因为我希望将这些重复的条目输入到表中.
编辑:我想我现在有解决方案,但需要做一些更有意义的检查......
DELETE TBLFIRE_TEMP3 FROM TBLFIRE_TEMP3
LEFT OUTER JOIN (
SELECT MIN(FireNo) as FireNo, ActionRef, FRADate, FIREUPRN
FROM TBLFIRE_TEMP3
GROUP BY ActionRef, FRADate, FIREUPRN
) as KeepRows ON
TBLFIRE_TEMP3.FireNo = KeepRows.FireNo
WHERE
KeepRows.FireNo IS NULL
Run Code Online (Sandbox Code Playgroud)
- ###############上一条评论###############
我有一个表有重复(基于三列).我可以通过执行以下操作找到它们并查看它们然后只是想删除重复项(即所有计数(*)结果都是'1')
SELECT COUNT(*),ActionRef, FRADate, FIREUPRN
FROM TBLTempTable
GROUP BY ActionRef, FRADate, FIREUPRN
Run Code Online (Sandbox Code Playgroud)
所以我可以看到这些群体发生的次数.我想要做的是删除重复项.我已经尝试了以下但它删除了每一行,甚至是单数:
DELETE a FROM TblTempTable a JOIN
(
SELECT ActionRef, FRADate, FIREUPRN
FROM TblTempTable
GROUP BY ActionRef, FRADate, FIREUPRN
) d
ON (a.ActionRef = b.ActionRef
AND a.FRADate = b.FRADate
AND a.FIREUPRN = …Run Code Online (Sandbox Code Playgroud) 我想删除重复记录而不使用ROW_NUMBER()函数(SQL Server)
示例:包含以下数据的表:
name salary
-----------------
Husain 20000.00
Husain 20000.00
Husain 20000.00
Munavvar 50000.00
Munavvar 50000.00
Run Code Online (Sandbox Code Playgroud)
删除重复记录表后应包含如下数据:
name salary
-----------------
Husain 20000.00
Munavvar 50000.00
Run Code Online (Sandbox Code Playgroud) 你马上就会想我直接去这里问我的问题,但我搜索了很多东西,没有找到一个决定性的答案.
事实:我有一张包含330万行,20列的表格.第一行是主键,因此是唯一的.
我必须删除列2到列11重复的所有行.实际上是一个基本问题,但是有很多不同的方法,而每个人最终都寻求相同的解决方案,删除重复.
我个人在考虑GROUP BY HAVING COUNT(*)> 1这是要走的路还是你的建议?
非常感谢提前!大号
是的,你可以多次找到类似的问题,但是:这里发布的最优雅的解决方案适用于SQL Server,但不适用于Sybase(在我的案例中是Sybase Anywhere 11).我甚至发现一些与Sybase相关的问题被标记为SQL Server问题的重复,这没有帮助.
我喜欢但不起作用的解决方案的一个例子是WITH ... DELETE ...构造.
我找到了使用游标或while循环的工作解决方案,但我希望没有循环可能.
我希望有一个漂亮,简单和快速的查询,只删除除了一个完全重复的所有内容.
这里有一个小测试框架:
IF OBJECT_ID( 'tempdb..#TestTable' ) IS NOT NULL
DROP TABLE #TestTable;
CREATE TABLE #TestTable (Column1 varchar(1), Column2 int);
INSERT INTO #TestTable VALUES ('A', 1);
INSERT INTO #TestTable VALUES ('A', 1); -- duplicate
INSERT INTO #TestTable VALUES ('A', 1); -- duplicate
INSERT INTO #TestTable VALUES ('A', 2);
INSERT INTO #TestTable VALUES ('B', 1);
INSERT INTO #TestTable VALUES ('B', 2);
INSERT INTO #TestTable VALUES ('B', 2); -- duplicate
INSERT …Run Code Online (Sandbox Code Playgroud) 我正在使用SQL Server.我创建的SQL表有20000多行.我有使用以下查询过滤重复.
SELECT
Entity,ExpenseType,Amount,Description,APSupplierID,ExpenseReportID,Employee,ExpenseDate,COUNT(*)
FROM
TotalsByGLCenter
GROUP BY
Entity,ExpenseType,Amount,Description,APSupplierID,ExpenseReportID,Employee,ExpenseDate
HAVING
COUNT(*) > 1
Run Code Online (Sandbox Code Playgroud)
现在我想从SQL Server删除Duplicate如何添加删除以上查询?
我的SQL Server表中有一个情况,我有许多重复的记录,如下所示:
SID Username InQueue
------------------------------------------------------------------
162 peeeer2 492 2017-01-18 12:20:21.820 0 354
2791 peeeer2 460 2017-01-11 00:00:00.000 1 NULL
Run Code Online (Sandbox Code Playgroud)
这里不需要的记录是我设置的peeeer2用户InQueue = true.我需要删除InQueue列设置为1的所有重复项,另一个标准是用户名实际上是重复的...
表名是SearchedUsernames:
delete from SearchedUsernames
where Username ??
Run Code Online (Sandbox Code Playgroud)
有人可以帮我解决这个问题吗?
编辑:
@TimSchmelter ty这么多,这就像一个魅力.但是我仍然收到错误.我需要首先删除此表的相邻FK.例如,当我在邻居表中有一个名为UserTransactions的相应FK记录时,如下所示:
ID SID
----------------
162 162
2791 2791
Run Code Online (Sandbox Code Playgroud)
我需要首先删除此邻居表中的所有记录,然后使用您编写的查询删除重复项.但是,这次我只想删除那些有重复记录且设置InQueue = 0的那些;
所以场景看起来像这样:
从相邻表UserTransactions中的两个重复项中删除FK记录SID
然后执行DTV&Tim写的稍微更改的查询,只删除那些重复且设置了InQueue = 0的记录;
sql ×10
sql-server ×7
sql-delete ×2
distinct ×1
duplicates ×1
group-by ×1
mysql ×1
sqlanywhere ×1
sybase ×1
t-sql ×1