有没有办法改善这个查询..
INSERT INTO mastertable
VALUES (SELECT *
FROM staging_tbl s
WHERE s.pac NOT IN (SELECT pac
FROM mastertable)
AND s.store NOT IN (SELECT store
FROM mastertable))
Run Code Online (Sandbox Code Playgroud)
不确定这是否可以在第一位工作..基本上......只有当相同的PAC-STORE组合当前不存在时才想从Staging_Tbl中选择记录.如果PAC存在但是对于另一个STORE ..,我们应该选择,反之亦然.
例如:如果MasterTable如下所示,
PAC1 STORE1
PAC1 STORE2
PAC2 STORE1
PAC2 STORE2
Run Code Online (Sandbox Code Playgroud)
只有在登台表中有像PAC1 STORE3这样的记录时才应该插入..而不是PAC1 STORE2
你有这些列的索引......这将做出改变
你也可以使用NOT EXISTS
INSERT INTO MASTERTABLE
SELECT * FROM Staging_Tbl S
WHERE NOT EXISTS ( SELECT 1 FROM MasterTable M
WHERE S.STORE = M.STORE
AND S.PAC = M.PAC)
Run Code Online (Sandbox Code Playgroud)
或者左键加入
INSERT INTO MASTERTABLE
SELECT S.* FROM Staging_Tbl S
LEFT OUTER JOIN MasterTable M
ON S.STORE = M.STORE
AND S.PAC = M.PAC
WHERE M.PAC IS NULL
AND M.STORE IS NULL
Run Code Online (Sandbox Code Playgroud)
除此之外,请确保使用此测试性能
INSERT INTO MASTERTABLE
SELECT * FROM Staging_Tbl
EXCEPT
SELECT * FROM MASTERTABLE
Run Code Online (Sandbox Code Playgroud)
我自己并不喜欢最好的
另请参阅 选择一个表中不存在于另一个表中的所有行以使用OUTER APPLY和EXCEPT来执行相同操作
| 归档时间: |
|
| 查看次数: |
204 次 |
| 最近记录: |