Select where Count less than 10 where column names from 3 joined tables

Select where Count less than 10 where column names are from 3 joined tables

我有三个 table 场地、音乐会和活动。我正在寻找一种方法来显示分配少于两个事件的场地的所有详细信息,包括没有分配的场地。事件 table 使用连接从音乐会 table 间接获取场地的详细信息,场地没有外国活动,但音乐会有一个。

下面是一段代码,但它没有按预期工作

 SELECT v.venue_id, v.venue_name, COALESCE( x.cnt, 0 ) Venue_count FROM 
 venue v
 LEFT JOIN concert ct ON v.venue_id = ct.venue_id
 LEFT JOIN event e ON e.concert_id = ct.concert_id
 LEFT OUTER JOIN (SELECT concert_id, COUNT( * ) cnt
 FROM event
 GROUP BY concert_id )x ON ct.concert_id = x.concert_id
 GROUP BY Venue_count
 ORDER BY  `Venue_count` DESC

我认为您的查询可以用更简单的方式编写

select  v.venue_id, v.venue_name
from    venue v
left join
        concert ct
on      v.venue_id = ct.venue_id
left join
        event e
on      e.concert_id = ct.concert_id
group by v.venue_id, v.venue_name
having   count(distinct e.event_id) < 2

这将从 venuesconcerts 和从 concertsevents,计算每个场地的事件数,并仅返回少于两个的事件.没有分配的场地将通过使用 left join.

来保留