我想在这里挑战SQL社区.让我们拥有以下数据和SQL查询:
create table A
(
a_id integer unique,
code int
);
create table B
(
a_id integer foreign key references A(a_id),
b_count int
);
insert into A values (1, 20);
insert into A values (3, 30);
insert into A values (null, 30);
insert into B values (1, 100);
insert into B values (1, 120);
insert into B values (null, 200);
select A.a_id, sum(B.b_count) Bsum
from A
left join B on A.a_id = B.a_id
group by A.a_id
Run Code Online (Sandbox Code Playgroud)
为什么SQL查询没有将NULL的值相加?换句话说,为什么我们得到
a_id Bsum
---------------
NULL NULL
1 220
3 NULL
Run Code Online (Sandbox Code Playgroud)
代替
a_id Bsum
---------------
NULL 200
1 220
3 NULL
Run Code Online (Sandbox Code Playgroud)
这与此无关sum().原因是比较left join的方式和方法NULL.这是您的查询:
select A.a_id, sum(B.b_count) Bsum
from A left join
B
on A.a_id = B.a_id
group by A.a_id;
Run Code Online (Sandbox Code Playgroud)
在行所在的a_id位置NULL,=求值为NULL- 这不是真的.你似乎想要的是:
select A.a_id, sum(B.b_count) Bsum
from A left join
B
on A.a_id = B.a_id or (A.a_id is null and B.a_id is null)
group by A.a_id;
Run Code Online (Sandbox Code Playgroud)