Ekt*_*rma 3 mysql sql stored-procedures sql-delete
我想删除下表中的多个重复键:
id | name | uid
1 | ekta | 5
2 | ekta | 5
3 | sharma | 10
4 | sharma | 10
Run Code Online (Sandbox Code Playgroud)
希望它像
id | name | uid
1 | ekta | 5
3 | sharma | 10
Run Code Online (Sandbox Code Playgroud)
我正在使用mysql.可能吗?我无法使用 unique constraint查询来创建唯一的输入,因为我希望将这些重复的条目输入到表中.
这样做的一种方法是使用子表连接表LEFT JOIN.子查询获得最低ID的每个UID.当记录在子查询上没有匹配时,只表示它没有匹配的记录,可以安全删除.
DELETE a
FROM TableName a
LEFT JOIN
(
SELECT uid, MIN(ID) min_ID
FROM TableName
GROUP BY uid
) b ON a.uid = b.uid AND
a.ID = b.min_ID
WHERE b.uid IS NULL
Run Code Online (Sandbox Code Playgroud)
但是,如果记录中UID可以有不同的名称,那么您需要name在group by子句中包含或者只保留uid最低的唯一记录ID.
DELETE a
FROM TableName a
LEFT JOIN
(
SELECT uid, MIN(ID) min_ID, name
FROM TableName
GROUP BY uid, name
) b ON a.uid = b.uid AND
a.ID = b.min_ID AND
a.name = b.name
WHERE b.uid IS NULL
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1030 次 |
| 最近记录: |