从相当大的SQL Server表中删除重复行的最佳方法是什么(即300,000多行)?
当然,由于RowID身份字段的存在,行不会是完美的重复.
MyTable的
RowID int not null identity(1,1) primary key,
Col1 varchar(20) not null,
Col2 varchar(2048) not null,
Col3 tinyint not null
Run Code Online (Sandbox Code Playgroud) 可能重复:
SQL - 如何删除重复的行?
我有一个行数非常多的表.不允许重复,但由于行如何创建的问题我知道这个表中有一些重复.我需要从关键列的角度消除额外的行.其他一些列的数据可能略有不同,但我并不关心.我仍然需要保留其中一行.SELECT DISTINCT将无法工作,因为它在所有列上运行,我需要根据键列抑制重复.
如何删除额外的行但仍保持有效?
我有一个巨大的表--3600万行 - 在SQLite3中.
在这个非常大的表中,有两列
但是,有些行是重复的.也就是说,hash和d都具有相同的值.
此外,如果两个哈希值相同,则d的值也相同,但两个相同的ds不表示两个相同的哈希值
无论如何,我想删除重复的行.我没有主键列.最快的方法是什么?
编辑: hash
似乎可以做到这一点.
我有以下SQL表:
AR_Customer_ShipTo
+--------------+------------+-------------------+------------+
| ARDivisionNo | CustomerNo | CustomerName | ShipToCode |
+--------------+------------+-------------------+------------+
| 00 | 1234567 | Test Customer | 1 |
| 00 | 1234567 | Test Customer | 2 |
| 00 | 1234567 | Test Customer | 3 |
| 00 | ARACODE | ARACODE Customer | 1 |
| 00 | ARACODE | ARACODE Customer | 2 |
| 01 | CBE1EX | Normal Customer | 1 |
| 02 | ZOCDOC | Normal Customer-2 …Run Code Online (Sandbox Code Playgroud) 有没有办法在postgres中获得记录的rowid?
在oracle我可以使用喜欢
SELECT MAX(BILLS.ROWID) FROM BILLS
Run Code Online (Sandbox Code Playgroud) MySQL的新版本8.0现在支持Common Table Expressions。
根据手册:
SELECT,UPDATE和DELETE语句的开头允许使用WITH子句:
WITH ... SELECT ...
WITH ... UPDATE ...
WITH ... DELETE ...
Run Code Online (Sandbox Code Playgroud)
因此,我认为,鉴于下表:
ID lastName firstName
----------------------
1 Smith Pat
2 Smith Pat
3 Smith Bob
Run Code Online (Sandbox Code Playgroud)
我可以使用以下查询:
;WITH ToDelete AS
(
SELECT ID,
ROW_NUMBER() OVER (PARTITION BY lastName, firstName ORDER BY ID) AS rn
FROM mytable
)
DELETE FROM ToDelete
Run Code Online (Sandbox Code Playgroud)
为了从表中删除重复项,就像在SQL Server中一样。
原来我错了。当我尝试DELETE从MySQL Workbench 执行stament时出现错误:
错误代码:1146。表“ todelete”不存在
当我尝试UPDATE使用CTE 时,还会收到一条错误消息。
因此,我的问题是,如何在MySQL WITH的UPDATEor DELETE语句的上下文中使用子句(如8.0版的手册中所述)?
mysql common-table-expression sql-update sql-delete mysql-8.0
我需要删除每个表 ID 的所有重复项(除了一个)。就像下面这样。我需要删除 valueid 上 01,02,03 的所有重复项...
\n\n原来的:
\n\nid | valueid | data\n____________________________\n01 | 1001 | datadata1 \n01 | 1002 | datadata2\n01 | 1001 | datadata1\n02 | 1323 | datamoredata123\n02 | 1323 | datamoredata123\n03 | 22123 | evenmoredata\n03 | 24444 | andalsomore\nRun Code Online (Sandbox Code Playgroud)\n\n应该像这样结束:
\n\nid | valueid | data\n____________________________\n01 | 1001 | datadata1 \n01 | 1002 | datadata2\n02 | 1323 | datamoredata123\n03 | 22123 | evenmoredata\n03 | 24444 | andalsomore\nRun Code Online (Sandbox Code Playgroud)\n\n试图用这样的方法来做到这一点,但我不\xc2\xb4t 不明白如何将删除的 id 分组
\n\nWITH …Run Code Online (Sandbox Code Playgroud) 我对表具有以下结构DataTable:每列都是数据类型int,RowID是标识列和主键。LinkID是外键,并链接到另一个表的行。
RowID LinkID Order Data DataSpecifier
1 120 1 1 1
2 120 2 1 3
3 120 3 1 10
4 120 4 1 13
5 120 5 1 10
6 120 6 1 13
7 371 1 6 2
8 371 2 3 5
9 371 3 8 1
10 371 4 10 1
11 371 5 7 2
12 371 6 3 3
13 371 7 7 2
14 371 8 …Run Code Online (Sandbox Code Playgroud) 我继承了一个SQL Server数据库,里面有重复的数据.我需要找到并删除重复的行.但是没有id字段,我不确定如何找到行.
通常情况下,我会使用a将其与自身进行比较,LEFT JOIN并检查除了ID字段之外的所有字段都是相同的table1.id <> table2.id,但没有它,我不知道如何找到重复行而不是它本身也匹配.
表:
productId int not null,
categoryId int not null,
state varchar(255) not null,
dateDone DATETIME not null
Run Code Online (Sandbox Code Playgroud)
样本数据
1, 3, "started", "2016-06-15 04:23:12.000"
2, 3, "started", "2016-06-15 04:21:12.000"
1, 3, "started", "2016-06-15 04:23:12.000"
1, 3, "done", "2016-06-15 04:23:12.000"
Run Code Online (Sandbox Code Playgroud)
在该示例中,只有第1行和第3行是重复的.
我如何找到重复项?
sql sql-server sql-server-2005 sql-server-2008 sql-server-2012
我正在使用 Snowflake 数据库并运行此查询以查找总数、不同记录数和差异:
select
(select count(*) from mytable) as total_count,
(select count(*) from (select distinct * from mytable)) as distinct_count,
(select count(*) from mytable) - (select count(*) from (select distinct * from mytable)) as duplicate_count
from mytable limit 1;
Run Code Online (Sandbox Code Playgroud)
结果:
1,759,867
1,738,924
20,943 (duplicate_count)
Run Code Online (Sandbox Code Playgroud)
但是当尝试使用另一种方法时(将所有列分组并找到计数 > 1 的位置):
select count(*) from (
SELECT
a, b, c, d, e,
COUNT(*)
FROM
mytable
GROUP BY
a, b, c, d, e
HAVING
COUNT(*) > 1
)
Run Code Online (Sandbox Code Playgroud)
我明白了5,436。
为什么重复的数量存在差异?(20,943对比5,436 …
sql ×8
sql-server ×7
t-sql ×4
duplicates ×3
sql-delete ×2
database ×1
join ×1
mysql ×1
mysql-8.0 ×1
postgresql ×1
snowflake-cloud-data-platform ×1
sql-update ×1
sqlite ×1