我有一个包含两列ID的表,描述
ID列不是唯一的。
我想要一个DELETE查询,使该表在ID列中具有唯一值。
例如,如果这是我当前的表
ID说明
- 5 ABC
- 5 DEF
- 6 XDX
- 6 KKK
- 7 AAA
我想修改表格,使其成为
ID说明
- 5 ABC
- 6 XDX
- 7 AAA
(我想每个id只留一行,无论哪一行都行,例如可以是第一行)
我正在使用mysql
答案 0 :(得分:2)
“我想要一个查询,使该表在ID列中具有唯一值。”
这将为每个ID
提供一条记录。
SELECT ID, MIN(Description) Description
FROM tableName
GROUP BY ID
这是删除重复ID
的删除语句,只留下表中的唯一ID
。
警告:这会从您的表中删除记录。
DELETE a
FROM tableName a
LEFT JOIN
(
SELECT ID, MIN(Description) Description
FROM tableName
GROUP BY ID
) b ON a.ID = b.ID AND
a.Description = b.Description
WHERE b.ID IS NULL
答案 1 :(得分:1)
最优雅的方法是使用mysql的多表删除语法并将表连接到自身:
delete d
from mytable t
join mytable d on d.id = t.id
and d.description > t.description
此查询的关键部分是description
的大于比较,它不仅会停止同一行连接,还会预测选择要删除的副本。
答案 2 :(得分:0)
在PostgreSQL中,你可以这样做。
delete
from table1
where (id, description) not in
(select id, min(description)
from table1
group by id);
我将看看MySQL是否支持行构造函数。
(后来:MySQL 支持行构造函数,但有another limitation阻止它工作。“目前,你不能从表中删除并从子查询中的同一个表中选择。“)
答案 3 :(得分:0)
我认为这就是你真正需要的东西 delete duplicate rows from table