将两个表联接在第三个表上

  • 本文关键字:三个 两个 sql presto
  • 更新时间 :
  • 英文 :


如果我有两个表没有直接关系,但必须通过第三个表连接,最好的方法是什么?

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' );

这消除了外部查询中的重复消除。

相关内容

  • 没有找到相关文章

最新更新