我是SQL新手,我有两个表RACER和SPONSOR, RACER TABLE有这些列
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
答案 0 :(得分:0)
您需要了解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
子句中指定您缺少的两个表。
答案 1 :(得分:0)
您可以使用联接(如果赞助商没有赛车,则可以使用左联接)并使用group by和count
获取结果而不使用subselect select s.sponsor_name , count(*)
from SPONSOR s r
left JOIN racer r s.sponsor_id = r.sponsor_id
GROUP BY s.sponsor_name
答案 2 :(得分:0)
您的版本带有子查询是合理的,特别是因为在MySQL中它可以比相应的GROUP BY
查询具有更好的性能。但是,它需要是相关的子查询。看起来像是:
select s.*,
(select count(*)
from racer r
where s.sponsor_id = r.sponsor_id
) as cnt
from sponsor s;
换句话说,选择JOIN
方法或子查询方法,但不要同时选择相同的值。