mysql - 删除所有值并留下一个

标签 mysql database database-design

我有一个像这样的表:

uid | name | user_id
--------------------
1   | aaa  | 111 
2   | bbb  | 111
3   | ccc  | 222
4   | aaa  | 222
5   | vvv  | 333
6   | zzz  | 333
7   | aaa  | 111
8   | bbb  | 111

我想编写一个查询,它会删除所有名称aaa,但留下一次aaa

输出如下:

  uid | name | user_id
  --------------------
    1 | aaa  | 111
    2 | bbb  | 111
    3 | ccc  | 222
    4 | aaa  | 222
    5 | vvv  | 333
    6 | zzz  | 333

可以通过查询吗?

最佳答案

DELETE  a
FROM    table tbl
        LEFT JOIN
        (
            SELECT  user_id, MIN(uid) min_uid, name
            FROM    table
            GROUP   BY user_id, name
        ) tbl1 ON  tbl.user_id = tbl1.user_id AND
                tbl.uid = tbl1.min_uid AND
                tbl.name = tbl1.name
WHERE   tbl1.user_id IS NULL

您必须比较名称和 uid 才能删除所有重复值。

关于mysql - 删除所有值并留下一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15499992/

相关文章:

php - 如何使用 php pdo 将多个表安装到 mysql 数据库

mysql - 数据归一化无法达到3nf

mysql - MySQL 中的多对多关系

mysql - 在交叉引用表中创建具有两个外键的 MySQL 表

mysql - groupBy 期望多对多关系中有更多表列

PHP注册错误

sql - 你如何处理关系数据库中的 m..n 关系?

mysql - 查询 mysql 时的撇号

mysql - 我应该改变这个数据库设计中的任何内容吗?

php - 如何将用户输入的撇号存储到 MySQL 数据库中?