首页 > 解决方案 > 如何对表 A 和 B 进行特殊连接(仅在一对一匹配时保留 A 行并添加 B 列)

问题描述

我想将表 B 中的表 A 信息添加到表 B 中的表 A 的行中,该行在表 B 中有一个且只有一个行匹配。

示例:给定表 A

+ lastName firstName
+ A        B
+ C        D
+ E        F

与表 B

* lastName firstName age
* A        B         10
* C        D         15
* C        D         20

我想要表格结果

* lastName firstName age
* A        B         10
* C        D         null
* E        F         null

是否可以在 SQL 中做到这一点?左连接是不够的

标签: sqljoin

解决方案


有点儿

select A.lastName, A.firstName, u.age
from A
left join (
   select lastName, firstName, max(age) age
   from B
   group by lastName, firstName
   having count(*) = 1 -- or may be count(distinct age) = 1
) u on u.lastName = A.lastName and u.firstName = A.firstName

推荐阅读