首页 > 解决方案 > 用于连接两个表并表示不匹配的空值的 Sql 查询

问题描述

我有 2 张桌子

表格1:

id|name1
-----
1|Tom
2|Tom

表 2:

id|name2
-----
1|Tom
1|Lucy
1|Frank
2|Tom
2|John

我使用的代码:

select a.id,a.name,b.name from table1 a
join table 2 b
on a.id=b.id 
group by 1,2,3;

我得到的输出:

id|name1|name2
1|Tom|Tom
1|Tom|Lucy
1|Tom|Frank
2|Tom|Tom
2|Tom|John

我想要的输出:

id|name1|name2
1|Tom|Tom
1|Null|Lucy
1|Null|Frank
2|Tom|Tom
2|Null|John

一个简单的左连接在这里不起作用我试图为没有匹配项获取空值。我正在使用 MySQL 8.0 你可以在这里工作你的代码:

https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=b389d8e94b4b2f4e6188ca8e833b6d6f
谢谢。

标签: mysqljoin

解决方案


你需要left join一个table2to table1

select t2.id, t1.name1, t2.name2
from table2 t2 left join table1 t1
on t1.name1 = t2.name2 and t2.id = t1.id 

请参阅演示
结果:

> id | name1 | name2
> -: | :---- | :----
>  1 | Tom   | Tom  
>  1 | null  | Lucy 
>  1 | null  | Frank
>  2 | Jen   | Jen  
>  2 | null  | John

推荐阅读