【发布时间】:2022-01-17 08:38:35
【问题描述】:
我有一个表,但它没有唯一的 ID 或主键。
总共有 3 列。
| name | user_id | role_id |
|---|---|---|
| ben | 1 | 2 |
| ben | 1 | 2 |
| sam | 1 | 3 |
我想删除一个名为 Ben 的条目。
所以输出应该是这样的
| name | user_id | role_id |
|---|---|---|
| ben | 1 | 2 |
| sam | 1 | 3 |
大多数示例显示删除具有 ID 或主键的重复条目。但是,如何在删除其他条目的同时保留一个条目?
使用以下查询我能够得到重复的行
SELECT name, user_id, role_id, count(*) FROM some_table
GROUP BY name, user_id, role_id
HAVING count(*) > 1
为了澄清,我希望删除这些行。
最好不要创建新表。
【问题讨论】:
-
为所有列创建一个唯一键。
-
请说明您是想从数据库中实际删除一行,还是不让它出现在选择中。请澄清是什么使一行重复:所有列都是相同的吗?如果不是,请说明您希望如何选择要保留的行。
-
如果您只想选择没有重复的行,
select distinct name, user_id, role_id from some_table -
This might help。阅读使用
ROW_NUMBER()函数的示例。 -
更新了主要问题。我实际上想删除行本身。