互联网上的其他答案不是很清楚,所以我再次提出这个问题。
同样,我有一张桌子tb1
ID 114035 114035
如何删除1行&保持其他?
结果应为
ID 114035
答案 0 :(得分:3)
如果您不关心删除哪一个:
DELETE FROM tb1 WHERE ID = 114035 LIMIT 1;
否则找出要保留的内容与WHERE
子句中使用的内容区别开来。
答案 1 :(得分:1)
尝试
ALTER IGNORE TABLE tb1 ADD UNIQUE INDEX idx_name (ID);
<小时/> 使用
UNIQUE
向列添加ALTER
索引,并使用IGNORE
关键字
duplicate
条目。
后更新
删除Unique
约束
DROP INDEX idx_name ON tb1
或
ALTER TABLE tb1 DROP INDEX idx_name
答案 2 :(得分:0)
考虑使用临时表来存储您不想删除的行。
CREATE TEMPORARY TABLE tmp ( id INT );
INSERT INTO tmp ( id )
SELECT id
FROM tbl
GROUP BY id
HAVING COUNT(1) > 1;
然后删除您认为重复的所有行。
DELETE FROM tbl
WHERE EXISTS(
SELECT 1
FROM tmp
WHERE tmp.id = tbl.id
);
最后用以前的临时表中存储的行'替换'。
INSERT INTO tbl ( id )
SELECT id
FROM tmp;