我有一个两列ID的表,描述为SQL唯一查询
ID列不唯一。
我想删除查询,这将使该表必须在ID列的唯一值。
例如,如果这是我当前的表
ID说明
- 5 ABC
- 5 DEF
- 6 XDX
- 6 KKK
- 7 AAA
我想修改表格,使其成为
ID说明
- 5 ABC
- 6 XDX
- 7 AAA
(我要离开只有一排每个ID,无所谓哪列,例如第一行)
我用mysql
我有一个两列ID的表,描述为SQL唯一查询
ID列不唯一。
我想删除查询,这将使该表必须在ID列的唯一值。
例如,如果这是我当前的表
ID说明
- 5 ABC
- 5 DEF
- 6 XDX
- 6 KKK
- 7 AAA
我想修改表格,使其成为
ID说明
- 5 ABC
- 6 XDX
- 7 AAA
(我要离开只有一排每个ID,无所谓哪列,例如第一行)
我用mysql
“我想查询这将使该表必须在ID列的唯一值。”
这会给你每个ID
一个记录。
SELECT ID, MIN(Description) Description
FROM tableName
GROUP BY ID
这里有一个delete语句删除重复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
我认为他需要更新。 – CRDave
如果你想删除一些重复的'ID',你能告诉我你使用的是什么RDBMS? –
@CRDave - 你的意思是删除,但可以使用给定的语句*(容易或很难取决于dbengine)*删除记录。 OP应该提到dbms。 –
在PostgreSQL,你可以做到这一点。
delete
from table1
where (id, description) not in
(select id, min(description)
from table1
group by id);
我会看看MySQL是否支持行构造函数。
(后来:MySQL的确实支持行构造函数,但another limitation防止这种情况的工作“目前,您无法从表中删除,并从子查询相同的表中选择。“)
Uthe最优雅的方式是使用MySQL的多表删除的语法和加入表本身:
delete d
from mytable t
join mytable d on d.id = t.id
and d.description > t.description
此查询的关键部分是大于-的description
比较,这不只有停止同一行加入,也可以预见选择重复删除。
我想这是你真正need..try它 delete duplicate rows from table
哪个RDBMS您正在使用? –
工作你想删除dups,或只是从查询中省略它们吗? – Bohemian