我有两个表,Table1
和Table2
。
假设Table1
包含以下列:T1c1, T1c2, T1c3
并且Table2
包含以下列:T2c1, T2c2, T2c3
我需要根据两个表及其他两列之间的匹配对,将Table2.T2c3
的值添加到Table1.T1c3
,或者如果列中包含NULL
值,则只需匹配一个列值一张桌子或两张桌子。也就是说,我需要将Table1.T1c1
值与Table2.T2c1
值匹配,将Table1.T1c2
值与Table2.T2c2
值匹配,或者将Table1.T1c1
与Table2.T2c1
值匹配,如果有NULL
。
问题是,我的桌子很大;几亿行。我需要最快的匹配算法来填充Table1.T1c3
值的值。
答案 0 :(得分:0)
我认为您可以滥用Coalesce()
在您的加入的ON
条款中执行此操作:
SELECT table2.c3 + table1.c3
FROM table1
INNER JOIN table2
ON COALESCE(table1.c1, table2.c1) = COALESCE(table2.c1 = table1.c1)
AND COALESCE(table1.c2, table2.c2) = COALESCE(table2.c2 = table1.c2);
感觉感觉可能比将CASE
放在所有地方或者用一堆OR
条件来点击它可能更快,但它可能是6个其他六个......
这假设同时在任一表的c1
和c2
中都不会出现空值。否则你最终可能会遇到一些时髦的交叉连接恶作剧。