SQL Challenge: pourquoi la requête SQL ne se groupe pas selon NULL

Je voudrais défier la communauté SQL ici. Laissez-nous avoir datatables suivantes et la requête 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 

Pourquoi la requête SQL ne sum-t-elle pas la valeur de la valeur NULL? En d'autres termes, pourquoi nous obtenons

 a_id Bsum --------------- NULL NULL 1 220 3 NULL 

au lieu de

 a_id Bsum --------------- NULL 200 1 220 3 NULL 

Cela n'a rien à voir avec la sum() . La raison est la left join et la façon dont NULL fonctionne pour les comparaisons. Ceci est votre requête:

 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; 

Sur les lignes où a_id est NULL , the = évalue à NULL – ce qui n'est pas vrai. Ce que vous semblez vouloir, c'est:

 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;