Sql 如果不匹配,则在较少的字段上加入
假设我有以下疑问:Sql 如果不匹配,则在较少的字段上加入,sql,sql-server-2016,Sql,Sql Server 2016,假设我有以下疑问: select p.PetID, o.* from Pet p left join Owner o on p.OwnerName = o.OwnerName and p.Country = o.Country and p.Address = o.Address and p.Ref = o.Ref 如果没有匹配的宠物,我想简化加入: select p.PetID, o.* from Pet p left join Owner o on p.OwnerName = o.Owner
select p.PetID, o.*
from Pet p
left join Owner o
on p.OwnerName = o.OwnerName
and p.Country = o.Country
and p.Address = o.Address
and p.Ref = o.Ref
如果没有匹配的宠物,我想简化加入:
select p.PetID, o.*
from Pet p
left join Owner o
on p.OwnerName = o.OwnerName
and p.Country = o.Country
and p.Address = o.Address
如果仍有0个匹配项,我需要再次简化:
select p.PetID, o.*
from Pet p
left join Owner o
on p.OwnerName = o.OwnerName
and p.Country = o.Country
最后:
select p.PetID, o.*
from Pet p
left join Owner o
on p.OwnerName = o.OwnerName
我当前的解决方案:
插入到临时表中,然后从临时表中选择ownerId为null且有4个单独查询的位置。但我的数据集非常大,效率不高
Pet表-25列,1.5mil记录
所有者表-10列,3mil记录您可以执行多个左联接:
你确实需要填写。可以从每个表中获取列。但如何避免从所有者表中获取多个列?我应该合并1.OwnerID,o2.OwnerID,o3.OwnerID作为OwnerID吗?@user194076。确切地
select p.PetID, . . .
from Pet p left join
Owner o1
on p.OwnerName = o1.OwnerName and
p.Country = o1.Country and
p.Address = o1.Address and
p.Ref = o1.Ref left join
Owner o2
on p.OwnerName = o2.OwnerName and
p.Country = o2.Country and
p.Address = o2.Address and
o1.Ref is null left join
Owner o3
on p.OwnerName = o3.OwnerName and
p.Country = o3.Country and
o2.Ref is null left join
Owner o4
on p.OwnerName = o4.OwnerName and
o3.Ref is null ;