SQL唯一查询

时间:2013-05-30 07:47:26

标签: mysql sql

我有一个包含两列ID的表,描述

ID列不是唯一的。

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

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

ID说明

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

我想修改表格,使其成为

ID说明

- 5     ABC
- 6     XDX
- 7     AAA

(我想每个id只留一行,无论哪一行都行,例如可以是第一行)

我正在使用mysql

4 个答案:

答案 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