我是SQL的新手,我有两个表RACER和SPONSOR,赛车手表包含这些列
RACER_NAME,
SPONSOR_ID
RACER_ID- Primary KEY
SPONSOR table has these columns
SPONSOR_ID,
SPONSOR_NAME
现在我想找到与该赞助商关联的赞助商名称和赛车手编号。
这是我尝试过的:
select s.sponsor_name , (select count(*) from racer r) where INNER JOIN s.sponsor_id = r.sponsor_id
你需要
了解JOIN
是如何工作的,以及它的语法。
select s.sponsor_name, count(*) as total_racer
from
racer r inner join sponsor s
on r.sponsor_id=s.sponsor_id
group by r.sponsor_id
您需要在FROM
子句中指定这两个表,而您缺少这些表。
您可以使用连接(如果赞助商没有赛车手,则向左连接(并使用分组依据和计数获得结果,而无需子选择。
select s.sponsor_name , count(*)
from SPONSOR s r
left JOIN racer r s.sponsor_id = r.sponsor_id
GROUP BY s.sponsor_name
带有子查询的版本是合理的,特别是因为在MySQL中,它可以比相应的GROUP BY
查询具有更好的性能。 但是,它需要是一个相关的子查询。 这看起来像:
select s.*,
(select count(*)
from racer r
where s.sponsor_id = r.sponsor_id
) as cnt
from sponsor s;
换句话说,对于相同的值,请选择 JOIN
方法或子查询方法,但不能同时选择两者。