我有一个数据库,有两个表,Playlists
和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
,然后在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,所以我没有能够直接验证它。