Sql 如何对表A和表B进行特殊连接(仅当存在一对一匹配时才保留一行并添加B列)

Sql 如何对表A和表B进行特殊连接(仅当存在一对一匹配时才保留一行并添加B列),sql,join,Sql,Join,我想向表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

我想向表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中执行此操作?左连接不够

类型

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

我想您应该在
B
中向
A
添加唯一的行。为此,我建议
联合所有人

select firstname, lastname, max(age) as age
from b
group by firstname, lastname
having count(*) = 1
union all
select firstname, lastname, null as age
from a
where not exists (select 1
                  from from b
                  group by firstname, lastname
                  having count(*) = 1
                 );

这至少会产生问题的结果。

这是可能的。在左侧加入之前,在表B上进行分组。可能重复的请参见,点击谷歌“stackexchange作业”和投票箭头鼠标悬停文本。你能做些什么?你被困在哪里?你的教科书或文件中有什么相关的内容?(除了——这是一个副本。)@loic_midy。您的描述和数据不匹配。为什么将E/F添加到B中?年龄会发生什么变化?