如题,我已经在网上搜过了。。并没有找到合适的解决办法,都基本上有主键的,要不然就是对表的重复项顺序有要求
1
jugelizi 2019-07-03 22:36:40 +08:00
。。。换个思路 group 导出后删除原始数据再恢复
|
2
sker101 2019-07-03 22:45:14 +08:00
搜索了下 试试
CREATE TABLE temp SELECT DISTINCT * FROM tablename; ALTER TABLE tablename RENAME junk; ALTER TABLE temp RENAME tablename; |
4
dusu 2019-07-03 22:51:55 +08:00 via iPhone
没索引…做倒排是性能+速度+稳定的不错选择
|
5
Iamnotfish 2019-07-03 23:02:40 +08:00
面向谷歌编程:
DELETE TOP (SELECT COUNT(*) -1 FROM dbo.duplicateTest WHERE ID = 1) FROM dbo.duplicateTest WHERE ID = 1 但是只能删除指定 ID 的重复数据 |
6
leishi1313 2019-07-04 00:04:11 +08:00 via Android
先做一个 group by rank,重复去的数据视为在一个 group,然后外面再套个 delete where rank > 1 就好了。具体你先搜“ SQL group by rank ”,各家不一样看你用什么数据库了
|
7
txy3000 2019-07-04 00:24:05 +08:00 via Android
一句 SQL 什么鬼 炫技吗?
|
8
jingyulong 2019-07-04 00:32:28 +08:00 via iPhone
有个思路,利用 top 来做,先 groupby,得出重复数量,top (重复数量-1 ),卧槽,跟楼上有点像
|
9
msg7086 2019-07-04 02:18:12 +08:00
重复数据就开 LIMIT 啊。
比如一个表只有一个字段,里面有两条重复数据,那你 DELETE WHERE 条件 LIMIT 1 就好了嘛。 |
10
msg7086 2019-07-04 02:19:28 +08:00
一句 SQL 是真的意义不大吧……
|
11
c6h6benzene 2019-07-04 02:39:32 +08:00 1
删除重复数据跟有没有主键没有关系吧,你可以按重复项用 ROW_NUMBER()之类的排个序,然后把所有 number>1 的全删了。
|
12
xuanbg 2019-07-04 07:49:30 +08:00
|
13
xuanbg 2019-07-04 07:58:33 +08:00
上面的 sql 写错了一点,又不能修改,还不能写新的 SQL。。。。总之是根据重复字段分组,然后取某个字段的最大值或最小值,按这个字段的值做 join 条件,就能把这一条数据删掉了
|
14
JerryV2 2019-07-04 08:04:36 +08:00
Oracle 乱入
delete from table where rowid not in (select max(rowid) from table group by a, b, c, d ); [狗头] |
15
real3cho 2019-07-04 10:24:32 +08:00
解决业务问题的话 纠结一句就是钻牛角尖 其他情况的话 当我没说
|
16
7654 2019-07-04 10:28:21 +08:00
老哥稳,为何要一条 SQL 解决问题
|
17
realpg 2019-07-04 10:37:05 +08:00
想起了多年前面试一个 java 商业软件转 PHP 的
面试考点是一个不能直接简单 SQL 解决的删除问题 考察点就是性能 最优解 把数据库无法有效利用索引的部分代入 PHP 循环进行计算,把复杂查询变换为多个可有效利用索引高效的简单查询 这大哥可好,一副很牛逼的样子 20 分钟后给了我一句文本内容将近 4KB 的 SQL 解决问题…… 上模拟测试库执行时间将近 2 秒…… |