选择Count小于10的位置,其中列名称来自3个连接表

时间:2017-05-04 08:34:44

标签: mysql sql oracle sqlite sybase

我有三个桌子,音乐会和活动。我正在寻找一种方法来显示已分配少于两个事件的场地的所有细节,包括那些没有分配的场地。活动表通过连接间接从音乐会表获取场地的详细信息,场地没有外国人,但有一个用于音乐会。

以下是代码,但它没有按预期工作

 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

1 个答案:

答案 0 :(得分:0)

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

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

这将从venues发送到concerts,从concerts发送到events,计算每个会场的活动数量,只返回少于两个的活动。使用left join将保留没有分配的场地。