Проблема SQL-отношения «многие ко многим» - PullRequest
0 голосов
/ 18 мая 2011

Я изучаю SQL, и у меня есть проблема с построением запроса, и я не могу найти какой-либо материал для решения этой проблемы.Я объясню это в базе данных альбомов / треков.

Итак, вот что такое

http://imageshack.us/photo/my-images/194/diagramtt.png/

и что я хочу сделать:

http://imageshack.us/photo/my-images/803/selectwithwhere.png/

Я уверен, что ответ очевиден, но это действительно вызывает у меня головную боль.

Мариуш


(РЕДАКТИРОВАТЬ ypercube):

Мойдикое предположение состоит в том, что OP хочет показать все Albums и Tracks для тех Albums, которые отсутствуют Trackname с 'UnwantedTrackName'.

Ответы [ 4 ]

3 голосов
/ 18 мая 2011

Попробуйте это:

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 голос
/ 18 мая 2011

Нам было бы намного проще, если бы вы включили свой код и результаты в свой вопрос, вместо того, чтобы заставлять нас вводить его заново.

Требуются все альбомы и треки для всех альбомов, в которых нет одного конкретного трека:

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
0 голосов
/ 18 мая 2011

Попробуйте присоединиться к таблице дорожек. Если это не сработает, вставьте условие WHERE в предложение ON, например

track AS t ON (t.id = at.TrackID AND t.TrackName != 'UnwantedTrackName')
0 голосов
/ 18 мая 2011

Не совсем понятно, о чем вы спрашиваете, но «INNER JOIN» даст вам то, что вы хотите?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...