2011-01-21 8 views
1

У меня есть две таблицы:Какую SQL-операцию следует использовать?

TABLE 'songs' 
song_id --some other columns about this song 
------- 
1 
2 
3 

TABLE 'song_ownership' 
user_id  song_id 
-------  ------- 
28   1 
28   3 
538   1 
234   2 

Я заинтересован в выполнении запроса, где дается user_id я возвращенное все песни, которыми они владеют. Вы можете видеть, что пользователь 28 владеет двумя песнями, например.

Кстати, это лучшее, что я знаю, как нормализовать эту таблицу, и я открыт для предложений о том, как хранить эти данные более условно (я просто изучаю SQL). Является ли это типичной настройкой таблицы?

ответ

3
select songs.* 
from songs 
inner join song_ownership on song_ownership.song_id = songs.song_id and  
[email protected]_id 

Предполагая, что один и тот же пользователь не может владеть одной и той же песней дважды. До сих пор ваша нормализация выглядит прекрасно! Ваша таблица song_ownership будет таблицей «многие-ко-многим», и (если ассоциация песен-пользователей уникальна), вы можете поместить составной первичный ключ в оба столбца, а ваши пользователи будут в отдельной таблице.

+0

+1 предпочитают ваш запрос на мой! :-) – InSane

1
select * -- choose only the columns you're interested to, like user id and song name 
from songs 
    inner join song_ownership on song_ownership.song_id=songs.song_id 
where song_ownership.user_id=? 
Смежные вопросы