我需要在表1和表1中合并。表2如" Merge"中所示。
我在下面写的查询有效;但是太慢了!有没有更简单的方法可以更快地返回它?
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]
答案 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;