如何简化使用带有LEFT OUTER JOIN的ISNULL来合并表

时间:2018-02-01 12:50:40

标签: sql null left-join multiple-columns

我需要在表1和表1中合并。表2如" Merge"中所示。

enter image description here

我在下面写的查询有效;但是太慢了!有没有更简单的方法可以更快地返回它?

SELECT T1.Loc, T2.SO, T2.PO, T1.Item
FROM Table1 T1

LEFT OUTER JOIN Table2 T2
ON ISNULL(T1.[SO2],T1.[SO1]) = T2.[SO]

2 个答案:

答案 0 :(得分:0)

从不FROM子句中使用逗号。始终使用正确的,明确的JOIN语法:

SELECT *
FROM Table1 T1 LEFT OUTER JOIN
     Table2 T2
     ON COALESCE(T1.[SO2], T1.[SO1]) = T2.[SO];

无需加入Table2两次(更不用说获得笛卡尔积)了。我更喜欢COALESCE()ISNULL(),因为前者是用于替换NULL值的ANSI标准函数。

我应该补充一点,为了提高性能,最好使用两个连接:

SELECT T1.Loc, COALESCE(T2_2.SO, T2_1.SO) as SO,
       COALESCE(T2_2.PO, T2_1.PO) as PO, T1.Item
FROM Table1 T1 LEFT OUTER JOIN
     Table2 T2_2
     ON T1.[SO2] = T2_2.[SO] LEFT OUTER JOIN
     Table2 T2_1
     ON T1.[SO1] = T2_1.[SO] AND T1.[SO2] IS NULL;

SQL引擎更容易在干净列引用上优化仅使用相等和AND条件的连接(即,列不是任何函数调用的参数)。

答案 1 :(得分:0)

希望这个SQL完全满足您的要求。

Select T2.Loc, T2.SO, T2.PO, T1.item from table 2 T2 join table1 T1
on T1.SO1 = T2.SO;
相关问题