SQL查询以确定是否有与曲目无关的艺术家

问题描述

请帮助解决以下问题: 编写适当的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