【发布时间】:2020-07-06 05:37:16
【问题描述】:
我有一张下表:
MariaDB [groupdb]> select * from album;
+----+---------+---------+
| id | artist | user_id |
+----+---------+---------+
| 1 | ArtistX | 45677 |
| 2 | ArtistY | 378798 |
| 3 | ArtistX | 45677 |
| 4 | ArtistZ | 123456 |
| 5 | ArtistY | 888888 |
| 6 | ArtistX | 2312 |
| 7 | ArtistY | 378798 |
| 8 | ArtistY | 888888 |
| 9 | ArtistY | 888888 |
+----+---------+---------+
9 rows in set (0.000 sec)
我尝试使用以下查询查找重复记录:
MariaDB [groupdb]> select * from album where artist IN (select artist from album group by artist having count(artist)>1) and user_id IN (select user_id from album group by user_id having count(user_id)>1);
+----+---------+---------+
| id | artist | user_id |
+----+---------+---------+
| 1 | ArtistX | 45677 |
| 2 | ArtistY | 378798 |
| 3 | ArtistX | 45677 |
| 5 | ArtistY | 888888 |
| 7 | ArtistY | 378798 |
| 8 | ArtistY | 888888 |
| 9 | ArtistY | 888888 |
+----+---------+---------+
7 rows in set (0.001 sec)
这一切都很好。虽然我希望我的结果集有一个重复列表,但不包括第一个。即类似于下面的。
预期输出
+----+---------+---------+
| id | artist | user_id |
+----+---------+---------+
| 3 | ArtistX | 45677 |
| 7 | ArtistY | 378798 |
| 8 | ArtistY | 888888 |
| 9 | ArtistY | 888888 |
+----+---------+---------+
正如您在上面看到的,这是一个重复列表,不包括第一个。
注意:若要复制记录,artist 和 user_id 必须相同。
我的挑战是提出一个导致上述结果集的查询。
【问题讨论】:
-
执行 GROUP BY,使用 HAVING 和 MAX()。
标签: mysql sql duplicates