我已经使用临时表删除了 mysql 表中的重复行。不使用它可以做到吗?我进行了很多搜索,但没有找到任何解决方案。
号码 | 状态 | 服务 第1234章 一个 | x1 第1234章 D | x1 第1234章 D | x1 第1234章 一个 | x2 第1234章 D | x2 第2345章 一个 | x1
我的基本需求是,对于特定的号码和服务,应该只有一行是 instatus d。表中有很多条目
你可以尝试这样的事情: -
DELETE t1 FROM table t1, table t2 WHERE t1.name = t2.name AND t1.id > t2.id;
提供的 name 和 id 是表中的列
签出此链接
一个可能的解决方案是让 MySqlUNIQUE
使用选项应用约束IGNORE
(将错误视为警告)有效地对表进行重复数据删除
ALTER TABLE Table1 ENGINE MyISAM; -- this obviously needed only if your ENGINE is not MyISAM
ALTER IGNORE TABLE Table1 ADD UNIQUE (`number`, `status`, `service`);
ALTER TABLE Table1 ENGINE InnoDB; -- again this is only needed if your ENGINE was other than MyISAM
之后你会得到:
| 号码 | 状态 | 服务 | ----------------------------------------- | 第1234章 一个 | x1 | | 第1234章 一个 | x2 | | 第1234章 D | x1 | | 第1234章 D | x2 | | 第2345章 一个 | x1 |
这是SQLFiddle演示
DELETE t
FROM Table1 t JOIN
(
SELECT number, status, service, MAX(serial) serial
FROM Table1
GROUP BY number, status, service
HAVING COUNT(*) > 1
) q ON t.number = q.number
AND t.status = q.status
AND t.service = q.service
AND t.serial <> q.serial
结果是一样的:
| 连载 | 号码 | 状态 | 服务 | -------------------------------------- | 1 | 第1234章 一个 | x1 | | 4 | 第1234章 一个 | x2 | | 3 | 第1234章 D | x1 | | 5 | 第1234章 D | x2 | | 6 | 第2345章 一个 | x1 |
这是SQLFiddle演示