如果我有两个没有直接关系的表,但必须通过第三个表连接,那么最好的方法是什么?
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'
谢谢
答案 0 :(得分:1)
通常,在谈论一个月时,您希望包括一年。所以我建议:
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' );
这消除了外部查询中的重复消除。