2

我有一个包含两列 ID、DESCRIPTION 的表

ID 列不唯一。

我想要一个 DELETE 查询,它会使表在 ID 列中具有唯一值。

例如,如果这是我当前的表

标识说明

- 5     ABC
- 5     DEF
- 6     XDX
- 6     KKK
- 7     AAA

我想修改表格,使其变为

标识说明

- 5     ABC
- 6     XDX
- 7     AAA

(我想为每个id只留下一行,不管哪一行,例如可以是第一行)

我正在使用 mysql

4

4 回答 4

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
于 2013-05-30T07:48:33.387 回答
1

最优雅的方法是使用 mysql 的多表删除语法并将表连接到自身:

delete d
from mytable t
join mytable d on d.id = t.id
  and d.description > t.description

该查询的关键部分是 的大于比较description,它不仅会停止同行连接,而且还可以预测地选择要删除的重复项。

于 2013-05-30T08:04:38.563 回答
0

I think this is what you actually need..try it delete duplicate rows from table

于 2013-05-30T08:06:37.987 回答
0

在 PostgreSQL 中,您可以这样做。

delete 
from table1
where (id, description) not in
  (select id, min(description)
   from table1
   group by id);

我将看看 MySQL 是否支持行构造函数。

(后来:MySQL确实支持行构造函数,但有另一个限制阻止它工作。“目前,您不能从表中删除并在子查询中从同一个表中选择。”)

于 2013-05-30T08:00:44.360 回答