从Race Table

时间:2017-06-18 06:30:08

标签: mysql sql

我是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

3 个答案:

答案 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方法或子查询方法,但不要同时选择相同的值。