从两个表中选择所有列匹配的行,或者最多一列不匹配

时间:2017-11-11 02:44:28

标签: sql sql-server join

表A有21列,第1列是id,第2列 - 第21列是d1-d20,100k行

表B与表A具有相同的结构,但它有50k行

查找表A和表B中的所有数据:

  1. 所有列都匹配或
  2. 最多一个未知列是无与伦比的

1 个答案:

答案 0 :(得分:0)

您可以使用CASE语句。以下应该适合你。试着让我知道。

表t1和t2。为简单起见,我只将列保持为3。

Select t12.myID
from
(Select t1.ID as myID, t2.*, Case when
 t1.d1 = t2.d1 and t1.d2 = t2.d2 and t1.d3 = t2.d3
then 'A'
else
  Case when
   Length(Replace(Concat(Case When t1.d1 = t2.d1 then '0' else '1' end
                        ,Case When t1.d2 = t2.d2 then '0' else '1' end
                        ,Case When t1.d3 = t2.d3 then '0' else '1' end),'0','')) = '1'
       then 'B'
   else
      'C'
   end
 end as mc
  from t1, t2
  Where t1.ID = t2.ID) t12
  Where t12.mc IN ('A', 'B');