通过匹配儿童FK找到父母

时间:2014-08-14 03:47:04

标签: sql sql-server

我有一个包含两个表的数据库,PlaylistsPlaylistItems。 PlaylistItems将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,然后在PlaylistId上执行COUNT并返回COUNT > 1的结果。但是,我认为该解决方案还会显示包含2x '%Geographer - Kites%'和0x '%Sam Kang%'的播放列表。

有没有更聪明的方法来实现这个目标?

2 个答案:

答案 0 :(得分:1)

肖恩,这会有用吗,还是我们可以在这里工作?

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%')

答案 1 :(得分:1)

如果您对子查询不过敏,可以尝试类似

的内容
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,因此我无法直接验证它。