我正在学习SQL,我在构建查询时遇到问题,而且找不到任何材料来解决这个问题。我将在Album / Tracks数据库中解释它。
所以这是
那就是我想要做的事情:
我确信答案是显而易见的,但这确实让我很头疼。
马里乌什
(由ypercube编辑):
我的猜测是,OP希望为Albums
显示所有Tracks
和Albums
,{strong>不 Trackname
'UnwantedTrackName'
存在。
答案 0 :(得分:3)
试试这个:
select
a.*
from Album as a
where a.Album_Id not in
(
select
at.Album_Id
from AlbumTrack as at
join Track as t
on t.Track_Id = at.Track_Id
where t.TrackName ='SomeTrack1'
)
答案 1 :(得分:1)
如果您将代码和结果包含在您的问题中,而不是强迫我们重新输入,那么对我们来说会更容易。
对于所有不包含特定曲目的专辑,您需要所有专辑和曲目:
select
a.AlbumName,t.TrackName
from
Album a
inner join
AlbumTrack at
on
a.ID = at.AlbumID
inner join
Track t
on
at.TrackID = t.ID
left join
AlbumTrack at_anti
inner join
Track t_anti
on
at_anti.TrackID = t_anti.TrackID and
t_anti.TrackName = 'Unwanted Track'
on
at.AlbumID = at_anti.AlbumID
where
at_anti.TrackID is null
答案 2 :(得分:0)
目前还不是很清楚你在问什么,但是“INNER JOIN”会给你你想要的东西吗?
答案 3 :(得分:0)
尝试INNER加入曲目表。如果这不起作用,请将WHERE条件推送到ON子句 - 比如
track AS t ON (t.id = at.TrackID AND t.TrackName != 'UnwantedTrackName')