首页 > 解决方案 > SQL - 如何从两个表中找到重复项?

问题描述

我有一个问题,我需要编写一个 SQL 来显示重复的 PlayistID 和 PlaylistNames 以及任何关联的 TrackID。

我唯一尝试的是通过运行下面的代码查看所有数据来向后工作。然后希望隔离我正在寻找的东西。

查看他们推荐使用的 Stackoverflow HAVING COUNT(*) > 1,但对我来说无济于事。

任何建议将不胜感激。

SELECT *
FROM Playlist P
JOIN PlaylistTrack PP
    ON P.PlaylistId = PP.PlaylistId
JOIN Track T
    ON PT.TrackId = T.TrackId

结果应该是:

上面的输出是我正在寻找的重复项。我运行上面的代码,将其复制到 excel 中,并过滤以查看重复项是什么。

标签: sql-server

解决方案


您可以将表格的多个副本连接在一起

SELECT pp1.TrackId, p1.PlaylistName, pp1.PlaylistID, p2.PlaylistName, pp2.PlaylistID 
FROM Playlist P1
INNER JOIN PlaylistTrack PP1
    ON P1.PlaylistId = PP1.PlaylistId
INNER JOIN PlaylistTrack PP2
    ON (PP1.PlaylistId != PP2.PlaylistId AND pp1.TrackId = pp2.TrackId)
INNER JOIN Playlist P2
    ON P2.PlaylistId = PP2.PlaylistId
ORDER BY pp1.TrackId;

这将为您提供 TrackId 出现在多个播放列表中的结果。

它有一个小问题,你会得到重复的结果,只是颠倒了,即。你会得到:

Trackid  Playlist1Id  Playlist2Id
3503      8           10
3503     10            8

如果这是朝着正确的方向发展,您可以根据需要扩展 sql 以删除重复项。


推荐阅读