问题描述
请帮助解决以下问题: 编写适当的SQL查询以确定是否有与曲目无关的艺术家。我必须使用SELECT,JOIN和WHERE子句。 结果示例:
ARTIST_ID ARTIST_NAME
----------------------
AR011 Elvis Presley
这是我的桌子的样子:
ARTIST_ID ARTIST_NAME TRACK_ID TRACK_NAME TRACK_DURATION
------------------------------------------------------------
AR001 Marshmallow TR001 Silence 3.5
AR002 Khalid TR001 Silence 3.5
AR003 The Script TR001 Silence 3.5
AR004 Sam Smiths TR001 Silence 3.5
AR005 Nick Jonas TR001 Silence 3.5
AR006 Goldfish TR001 Silence 3.5
AR007 Method TR001 Silence 3.5
AR008 Justin Bieber TR001 Silence 3.5
AR009 BloodPop TR001 Silence 3.5
AR010 Pink TR001 Silence 3.5
AR011 Elvis Presley TR001 Silence 3.5
AR001 Marshmallow TR002 Rain 4.0
AR002 Khalid TR002 Rain 4.0
AR003 The Script TR002 Rain 4.0
解决方法
我相信您可以使用NOT EXISTS
测试ALBUM_TRACKS
表中轨道的存在。
select *
from ARTISTS a
where not exists(select 1
from ALBUM_TRACKS tr
where a.ARTIST_ID=tr.ARTIST_ID);
,
根据您在评论中发布的数据库结构,应该是这样的:
SELECT a.ARTIST_ID,a.ARTIST_NAME
FROM ARTISTS AS a
LEFT OUTER JOIN TRACK_ARTISTS AS ta ON ta.ARTIST_ID = a.ARTIST_ID
WHERE ta.ARTIST_ID IS NULL
这就像您在问题中所说的那样,假设您需要使用JOIN子句。
在这种情况下,如果联接表不需要输出,则使用EXISTS是更好的选择。
,您可以使用LEFT JOIN获得所需的结果
SELECT a.*
FROM artists a
LEFT OUTER JOIN album_tracks t ON a.artist_id =t.artist_id
WHERE t.artist_id IS NULL