如果我有两个表没有直接关系,但必须通过第三个表连接,最好的方法是什么?
artist
======
- id
- name
event
======
- id
- title
- start_time
artist_event
======
- artist_id
- event_id
下面的查询会找到所有在 12 月有活动的艺术家吗?
select distinct a.name
from artist a
join artist_event ae
on a.id = ae.artist_id
join event e
on e.id = ae.event_id
where date_trunc('month', e.start_time) = 'December'
谢谢
通常,在谈论一个月时,您希望包括一年。 所以我建议:
select distinct a.name
from artist a join
artist_event ae
on a.id = ae.artist_id join
event e
on e.id = ae.event_id
where e.start_time >= '2019-12-01' and
e.start_time < '2020-01-01';
您的版本将不起作用,因为'December'
是一个字符串(恰好是月份名称(。date_trunc()
返回一个日期(不是字符串(。
也就是说,我会推荐exists
:
select a.name
from artist a
where exists (select 1
from artist_event ae join
event e
on e.id = ae.event_id
where a.id = ae.artist_id
和 e.start_time>= '2019-12-01' 和 e.start_time <'2020-01-01' );
这消除了外部查询中的重复消除。