Sql 如何对表A和表B进行特殊连接(仅当存在一对一匹配时才保留一行并添加B列)
我想向表A中添加表B中的信息,仅用于表A中有一行且只有一行与表B中的行匹配的行 例如: 给出表ASql 如何对表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
+ 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中?年龄会发生什么变化?