MySQL 如何进行查询以从我的交汇点 table 获取信息以及不在该交汇点中的数据
MySQL How can I make query that gets info from my junction table as well as data that is not in that junction
所以为了开始一些背景信息,我有 3 个表,一个用于节目,一个用于网络,一个用于它们之间的关系。
我被要求编写一个查询,该查询将显示节目的标题和它所显示的网络以及我没有其上的节目数据的任何网络。
我想出的唯一解决方案在技术上可行,但我不禁觉得还有更好的解决方案。这是我写的查询。
SELECT s.title,n.name
FROM shows s
JOIN networks n
JOIN shows_networks ns (this is the junction table)
ON ns.show_id = s.id AND ns.network_id = n.id
UNION(
SELECT NULL as title,name
FROM networks
WHERE id NOT IN(SELECT network_id FROM shows_networks)
);
你似乎想要 left join
s:
select s.title, n.name
from networks n
left join shows_networks sn on sn.network_id = n.id
left join shows s on s.id = sn.show_id
您需要一个左连接嵌套查询,如下所示:
select s.title, n.name, z.title, z.name
from shows s
left join networks n on n.show_id = s.id
left join shows_networks ns on ns.network_id = n.id -- (this is the junction table)
left join (
select n2.show_id, null as title, n2.name
from networks n2
where n2.id not in(select network_id from shows_networks)
) as z on z.show_id = s.id
也许可以用 'missing' as title
之类的东西代替 null as title
。
所以为了开始一些背景信息,我有 3 个表,一个用于节目,一个用于网络,一个用于它们之间的关系。
我被要求编写一个查询,该查询将显示节目的标题和它所显示的网络以及我没有其上的节目数据的任何网络。
我想出的唯一解决方案在技术上可行,但我不禁觉得还有更好的解决方案。这是我写的查询。
SELECT s.title,n.name
FROM shows s
JOIN networks n
JOIN shows_networks ns (this is the junction table)
ON ns.show_id = s.id AND ns.network_id = n.id
UNION(
SELECT NULL as title,name
FROM networks
WHERE id NOT IN(SELECT network_id FROM shows_networks)
);
你似乎想要 left join
s:
select s.title, n.name
from networks n
left join shows_networks sn on sn.network_id = n.id
left join shows s on s.id = sn.show_id
您需要一个左连接嵌套查询,如下所示:
select s.title, n.name, z.title, z.name
from shows s
left join networks n on n.show_id = s.id
left join shows_networks ns on ns.network_id = n.id -- (this is the junction table)
left join (
select n2.show_id, null as title, n2.name
from networks n2
where n2.id not in(select network_id from shows_networks)
) as z on z.show_id = s.id
也许可以用 'missing' as title
之类的东西代替 null as title
。