SQL查询以确定是不是有任何与曲目无关的艺术家[关闭]
Posted
技术标签:
【中文标题】SQL查询以确定是不是有任何与曲目无关的艺术家[关闭]【英文标题】:SQL query to determine if there are any artists that are not associated with a track [closed]SQL查询以确定是否有任何与曲目无关的艺术家[关闭] 【发布时间】:2020-09-02 13:52:39 【问题描述】:请帮助解决这个问题: 编写适当的 SQL 查询以确定是否存在与曲目无关的艺术家。我必须使用 SELECT、JOIN AND 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
【问题讨论】:
或许需要提供更多数据和更好的数据样本。根据那张截图,每个艺术家都有一首曲目。 您使用的是哪个关系数据库管理系统?请提供您的输入和输出数据。 这里的大多数人都希望样本表数据和预期结果为格式化文本,而不是图像。而且我无法阅读那个微小的图像文本。助您轻松! @jarlh,好的,我会记住的。我是新来的,也是编码新手 :) 请不要通过破坏您的帖子为他人增加工作量。通过在 Stack Exchange 网络上发帖,您已在 CC BY-SA 4.0 license 下授予 Stack Exchange 分发该内容的不可撤销的权利(即无论您未来的选择如何)。根据 Stack Exchange 政策,帖子的非破坏版本是分发的版本。因此,任何破坏行为都将被撤销。如果您想了解更多关于删除帖子的信息,请参阅:How does deleting work? 【参考方案1】:根据您在 cmets 中发布的数据库结构,它应该是这样的:
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 是一个更好的选择。
【讨论】:
谢谢。它有效:)【参考方案2】:我相信您可以使用NOT EXISTS
来测试ALBUM_TRACKS
表中是否存在轨道。
select *
from ARTISTS a
where not exists(select 1
from ALBUM_TRACKS tr
where a.ARTIST_ID=tr.ARTIST_ID);
【讨论】:
【参考方案3】:您可以使用 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
【讨论】:
以上是关于SQL查询以确定是不是有任何与曲目无关的艺术家[关闭]的主要内容,如果未能解决你的问题,请参考以下文章