sql-server - SQL - 如何从两个表中找到重复项?
问题描述
我有一个问题,我需要编写一个 SQL 来显示重复的 PlayistID 和 PlaylistNames 以及任何关联的 TrackID。
Playlist 表包含 PlaylistID 和 PlaylistName 列。
PlaylistTrack 表包含 PlaylistID 和 TrackID 列。
Track 表包含 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
结果应该是:
- PlaylistName - 音乐和电视节目
- 播放列表 ID - 8 和 10
- TrackID = 3503 和 2819。
上面的输出是我正在寻找的重复项。我运行上面的代码,将其复制到 excel 中,并过滤以查看重复项是什么。
解决方案
您可以将表格的多个副本连接在一起
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 以删除重复项。