我正在學習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