我有一个包含两列的表格-艺术家,release_id
我可以运行哪个查询来显示重复记录?
例如 我的桌子是
ArtistX : 45677
ArtistY : 378798
ArtistX : 45677
ArtistZ : 123456
ArtistY : 888888
ArtistX : 2312
ArtistY: 378798
查询应显示
ArtistX : 45677
ArtistX : 45677
ArtistY : 378798
ArtistY : 378798
您可以在感兴趣的列之间使用分组来计算是否存在重复项。
SELECT
artist, release_id, count(*) no_of_records
FROM table
GROUP BY artist, release_id
HAVING count(*) > 1;
SELECT id,artist,COUNT(*) FROM myTable
GROUP BY artist, release_id HAVING COUNT(*) > 1
选择
艺术家,release_id,count(*)no_of_records,group_concat(id)
从表
GROUP BY艺术家,release_id
计数(*)> 1;
还添加group_concat(id)可以获得重复项的所有ID。
你可以尝试这样的事情
将输出
artist count(*)
45677 2
378798 2
从艺术家IN的表中选择*(通过count(ID)> 1的艺术家从表组中选择艺术家)和release_id IN(通过count(release_id)> 1的release_id从表组中选择release_id);
将提取:
艺术家X:45677
艺术家X:45677
艺术家Y:378798
艺术家Y:378798
您可以将此查询用于相同的结果。这个对我有用
SELECT名字,姓氏,列表。地址FROM列表
INNER JOIN(从列表中选择地址
GROUP BY地址具有count(id)> 1)dup ON list.address = dup.address
此方法可能不适合您,但是如果您想摆脱重复项并在确保重复项的同时执行此操作,则可以尝试以下操作:
将您的table1复制到table2中,例如:
CREATE TABLE table2 AS SELECT * FROM table1;
在table1中添加新列,例如将其命名为kount
运行查询(假定release_id应该是唯一列):
更新table1 AS t1 SET t1.kount =(从table2 AS t2 WHERE t1.release_id = t2.release_id中选择COUNT(*)
放置表table2
使用table1 .kount查找重复项并删除重复项或其他内容。最好在PHP / Python / Perl中。例如,通过这种方式,您可以确保它们确实是重复项,并且具有相同的release_id。相同的release_id可能是偶然产生的,标题,发布年份等可能有所不同。因此,只需将您的代码放在此处即可过滤重复项(伪代码):
foreach(sql(SELECT * FROM table1 WHERE kount> 1))做
//做一点事
尝试这个:
SELECT A.ARTIST,A.RELEASE_ID FROM ARTISTS A
WHERE EXISTS(
SELECT 'X' FROM ARTISTS B
WHERE B.ARTIST = A.ARTIST AND B.RELEASE_ID = A.RELEASE_ID
GROUP BY B.ARTIST,B.RELEASE_ID
HAVING COUNT(B.ARTIST)>1)
ORDER BY A.ARTIST;
如果一行中有更多唯一列,则可以使用以下方法: