我正在学习SQL,并且在构建查询时遇到问题,找不到任何材料来解决此问题。我会在专辑/曲目数据库中解释它。SQL查询多对多冲突问题
因此,这里是
和我想做的事:
我相信答案是显而易见的,但它确实让我头疼。
的Mariusz
(由ypercube编辑):
我大胆猜测是,OP想显示这些Albums
该没有Trackname
与'UnwantedTrackName'
存在所有Albums
和Tracks
。
我正在学习SQL,并且在构建查询时遇到问题,找不到任何材料来解决此问题。我会在专辑/曲目数据库中解释它。SQL查询多对多冲突问题
因此,这里是
和我想做的事:
我相信答案是显而易见的,但它确实让我头疼。
的Mariusz
(由ypercube编辑):
我大胆猜测是,OP想显示这些Albums
该没有Trackname
与'UnwantedTrackName'
存在所有Albums
和Tracks
。
试试这个:
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'
)
我只是发布这个答案。好的电话 – 2011-05-18 13:29:20
Thx先生=]它正在工作,但不是'Sometrack%',我必须提供'Sometrack1'的资源。现在我必须在NHibernate中实现^ ^,所以手指弄坏了家伙。 – Mariusz 2011-05-18 13:30:15
在'[NOT] IN'操作中不需要'DISTINCT' - 如果优化器感觉密集,它实际上可能会减慢查询速度。 – 2011-05-18 13:31:48
这是不是很清楚你问什么,但会“内部加入”给你你想要的?
会为我们轻松很多,如果你在你的包含的代码和你的结果问题,而不是强迫我们重新输入。
你想要的所有专辑和曲目,对于不包括一个特定的轨道全部相册:
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
你想要什么进一步的过滤条件? – 2011-05-18 13:06:08
您想要的结果中包含哪个TrackName? – CharithJ 2011-05-18 13:06:28
我想要所有没有跟踪名称为“Sometrack1”的专辑,这意味着在这种情况下只有专辑3 – Mariusz 2011-05-18 13:11:19