我有三个桌子,音乐会和活动。我正在寻找一种方法来显示已分配少于两个事件的场地的所有细节,包括那些没有分配的场地。活动表通过连接间接从音乐会表获取场地的详细信息,场地没有外国人,但有一个用于音乐会。
以下是代码,但它没有按预期工作
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
答案 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
将保留没有分配的场地。