无法编写正确的mysql连接查询

时间:2015-11-03 09:19:28

标签: mysql join

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

所以行为对我来说非常明显,但我无法编写查询来获取结果集,如前所述。

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