修复删除非唯一 ID 的 MySQL 查询
提供的查询在 MySQL 5.0 中不起作用。本文解决了这个问题,并提供了在 MySQL 中删除具有非唯一 ID 的行的替代解决方案。
原始问题:
DELETE FROM posts WHERE>
解释:
此查询尝试从“posts”表中删除“id”与在表中出现多次的行的“id”。但是,在 MySQL 5.0 中,无法使用子查询作为 DELETE 语句中的条件。
解决方案:
1.使用 IN 子句:
不要使用“=”,而是将条件更改为“IN”,以将“id”与子查询的结果集进行比较。
DELETE FROM posts WHERE id IN ( SELECT id FROM posts GROUP BY id HAVING (COUNT(id) > 1) )
2.分离 SELECT 和 DELETE 查询:
将子查询(SELECT 语句)与 DELETE 语句分离并顺序执行。
SELECT id FROM posts GROUP BY id HAVING (COUNT(id) > 1) INTO @duplicate_ids; DELETE FROM posts WHERE id IN (@duplicate_ids);
3.带别名的嵌套子查询:
嵌套子查询并为要在 DELETE 语句中使用的结果起别名。
DELETE FROM posts WHERE id IN ( SELECT * FROM ( SELECT id FROM posts GROUP BY id HAVING (COUNT(id) > 1) ) AS p )
4.使用 JOIN:
使用 JOIN 将表的“id”与子查询的结果集进行比较。
DELETE a.id FROM posts AS a JOIN ( SELECT id, COUNT(*) AS num FROM posts GROUP BY id HAVING num > 1 ) AS b ON a.id = b.id
以上是MySQL 5.0中如何高效删除具有非唯一ID的行?的详细内容。更多信息请关注PHP中文网其他相关文章!