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
这将从 venues
到 concerts
和从 concerts
到 events
,计算每个场地的事件数,并仅返回少于两个的事件.没有分配的场地将通过使用 left join
.
来保留
我有三个 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
这将从 venues
到 concerts
和从 concerts
到 events
,计算每个场地的事件数,并仅返回少于两个的事件.没有分配的场地将通过使用 left join
.