选择行与所有列匹配或最多一个无与伦比
表A有21列,第一列是ID,第二列 - 21列是D1-D20,100K行选择行与所有列匹配或最多一个无与伦比
表B具有相同结构如表A,但它具有50,000列
找到从表A和表B中的所有数据:
- 所有列匹配或
- 至多一个未知列是无与伦比
您可以使用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');
我明白了,案例有助于过滤,但如何从t1获得满足此条件的id 。顺便说一下,我可以使用sum(case ...)= 1作为第二个条件吗? – Philip
只需在select中添加t1.ID即可。我已经更新了我的答案。 – user6542823
立即检查,您只会获得'所有列匹配'或'最多只有一列匹配'的ID。 – user6542823
我标记了sql server,我不知道为什么会丢失,我该如何编辑它? – Philip
当你说所有列你的意思是D1 - D20 ..对不对?我们总是通过id匹配,然后我们需要找出是否所有的d1-d20匹配。如果不是,我们最多只能有一个不匹配的d1到d20 ..这是正确的吗? – user6542823
是啊,这就是我问的,我真的不知道如何满足条件“最多一列是无与伦比的” – Philip