sql:多对多关系加入

时间:2017-04-26 22:42:08

标签: sql sql-server sqlite

我对SQL很陌生,所以如果有多种可能性我想全部看到它们(并且听到哪些可能性比其他可能性更好)。我使用的是sqlite3。

我有以下3个表:userchannelsubscriptions

用户:

user_id    name
1          Johnny
2          Stacy
3          Allana

信道:

channel_id    channel_name
1             ESPN
2             Disney

订阅:

user_id    channel_id
1          1
2          2
3          1
3          2

要获取下表,我需要执行哪些SQL命令?我基本上想看看谁按名称订阅了哪些频道(所以在subscriptions表格中列出了什么,但是根据其他表格将数字映射到名称。“

user_id    channel_id
Johnny     ESPN
Stacy      Disney
Allana     ESPN
Allana     Disney

我已经尝试过以下但我在回复声明中没有得到任何结果:

select user.name, channel.channel_name from user, channel, subs where user.user_id == subs.user_id and channel.channel_id == subs.channel_id

2 个答案:

答案 0 :(得分:1)

尝试一下,如果您遇到任何困难,请告诉我。

select a.name,c.channel_name
from
user a
left join
subscriptions b
on a.user_id = b.user_id
left join
channel c
on b.channel_id = c.channel_id;  

或(以评论中提到的格式)

select u.name,c.channel_name
from
user u
left join
subscriptions s
on u.user_id = s.user_id
left join
channel c
on s.channel_id = c.channel_id;

答案 1 :(得分:0)

没有测试过,但试试这个:

select u.name ,c.channel from user_id u inner join subscriptions s on u.user_id=s.user_id inner join channel c on s.channel_id=c.channel_id