通过配对孩子来寻找父母



我有一个数据库,有两个表,PlaylistsPlaylistItems。播放列表项有一个FK返回到它们的播放列表。表如下所示:

PlaylistItems: Id (PK) | Title | PlaylistId (FK)
Playlists: Id (PK) | Title

我有几个查询找到我的PlaylistItems的标题:

Select * from PlaylistItems where Title LIKE '%Geographer - Kites%'
Select * from PlaylistItems where Title LIKE '%Sam Kang%'

每个查询都会产生许多结果,但我认为应该只有最小数量的播放列表同时包含两个结果。也就是说,我正在寻找包含'%Geographer - Kites%''%Sam Kang%'作为孩子的所有播放列表。

我正在考虑在我的每个Select语句上做JOIN,然后在playlistd上执行COUNT,并返回具有COUNT > 1的结果。但是,我认为该解决方案还将显示包含2x '%Geographer - Kites%'和0x '%Sam Kang%'的播放列表。

是否有更聪明的方法来实现这一点?

Sean,这个能行吗?还是我们可以在这里工作?

SELECT  * FROM Playlists WHERE ID IN(
SELECT PlaylistId FROM PlaylistItems where Title LIKE '%Geographer - Kites%'
INTERSECT
SELECT PlaylistId FROM PlaylistItems where Title LIKE '%Sam Kang%')

如果您对子查询不过敏,您可以尝试使用

select distinct PlaylistId from PlaylistItems where 
    Title LIKE '%Geographer - Kites%' and
    PlaylistId in (select distinct PlaylistId from PlaylistItems where Title LIKE '%Sam Kang%')

我没有访问SQL Server,所以我没有能够直接验证它。

最新更新