我在mysql中有以下两个表
1. Table-Name a
id int auto-increment PK
name varchar not null
year int(4) not null
2. Table-Name b
id int auto-increment PK
term varchar not null
a_id int FK references a.id
year int(4) not null
1。数据如下
从a;
中选择*1,'Ravi',2010
2,'Kumar',2011
从b中选择*;
1,'a',1,2009
2,'b',1,2010
3,'c',1,2008
4,'d',2,2008
5,'e',2,2009
6,'f',2,2010
现在我为结果集写了一个查询,如果b表有a.id和a.year = b.year的记录,它应该返回a.id和count(b.id)
例如 -
id | cnt
------------
1 | 1
2 | 0
------------
这是我的查询 -
select a.id,count(b.id) cnt from a
left join b
on b.a_id=a.id
where a.year=b.year
group by id;
返回结果集 -
id | cnt
------------
1 | 1
所以行为对我来说非常明显,但我无法编写查询来获取结果集,如前所述。
答案 0 :(得分:6)
您的WHERE
条款实质上会将LEFT JOIN
转换为INNER JOIN
。您应该将WHERE
的谓词移到ON
:
select a.id,count(b.id) cnt from a
left join b
on b.a_id=a.id AND a.year=b.year
group by id;
这样您就会返回所有 a
行。如果未找到匹配项,则cnt
将为0
。