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 ;