gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 00:19:55 26 4
gpt4 key购买 nike

我在 mysql 中有以下 2 个表

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

现在我为结果集编写了一个查询,它应该返回 a.id 和 count(b.id) 如果 b 表有 a.id 和 a.year=b.year 的记录

例如 -

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

所以行为对我来说非常明显,但我无法像我之前所说的那样编写查询来获取结果集。

最佳答案

您的 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

关于mysql - 无法编写正确的 mysql 连接查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33495351/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com