我有一张这样的table:
// users
+----+----------+-------+---------------------+
| id | name | age | some other cols .. |
+----+----------+-------+---------------------+
| 1 | Ali | 15 | .. |
| 2 | John | 15 | .. |
| 3 | Ali | 22 | .. |
| 4 | Martin | 18 | .. |
| 5 | Ali | 15 | .. |
| 6 | John | 30 | .. |
| 7 | John | 15 | .. |
+----+----------+-------+---------------------+
我想在上添加一个复合唯一索引 name, age
柱。现在,它给了我 there are duplicates rows
错误。我已经在用了 INSERT IGNORE ..
但很遗憾 IGNORE
mysql不再支持。
不管怎样,你知道如何删除两个行上值相同的行吗 name
以及 age
列并只保留其中一个(行之一)?换言之,我要删除上具有相同值的所有行 name
以及 age
除了其中一列。
因此,预期结果如下:
// users
+----+----------+-------+---------------------+
| id | name | age | some other cols .. |
+----+----------+-------+---------------------+
| 1 | Ali | 15 | .. |
| 2 | John | 15 | .. |
| 3 | Ali | 22 | .. |
| 4 | Martin | 18 | .. |
| 6 | John | 30 | .. |
+----+----------+-------+---------------------+
你知道我该怎么做吗?
4条答案
按热度按时间gpfsuwkq1#
我强烈建议将代码编写为:
使用
inner join
与>
他很聪明。但是,我认为它可能尝试多次更新同一行。考虑这个例子:
内部连接逻辑将尝试删除行“5”四次。此版本只删除一次。
muk1a3rh2#
希望这对你有用:
9jyewag03#
如果您只想以这种方式查看数据,那么基本选择可以实现以下功能:
在关于具有相同名称和年龄值的两个或多个记录“重复”的情况下,上述查询任意地仅保留具有最小值的记录
id
其中的价值。nhjlsmyf4#
我为你的问题举了个例子:
结果=