在SQL Server中匹配表的列值的最快方法

时间:2017-11-02 19:32:31

标签: sql-server sql-server-2008

我有两个表,Table1Table2

假设Table1包含以下列:T1c1, T1c2, T1c3 并且Table2包含以下列:T2c1, T2c2, T2c3

我需要根据两个表及其他两列之间的匹配对,将Table2.T2c3的值添加到Table1.T1c3,或者如果列中包含NULL值,则只需匹配一个列值一张桌子或两张桌子。也就是说,我需要将Table1.T1c1值与Table2.T2c1值匹配,将Table1.T1c2值与Table2.T2c2值匹配,或者将Table1.T1c1Table2.T2c1值匹配,如果有NULL

问题是,我的桌子很大;几亿行。我需要最快的匹配算法来填充Table1.T1c3值的值。

1 个答案:

答案 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个其他六个......

这假设同时在任一表的c1c2中都不会出现空值。否则你最终可能会遇到一些时髦的交叉连接恶作剧。