2011-04-05 117 views
3

有改善查询的方式..SQL查询逻辑 - SQL Server 2008中

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)) 

不知道这是否会在第一个地方工作.. Basically..want来选择记录从Staging_Tbl只有相同PAC-STORE组合目前不存在。如果PAC存在,但是对于另一个STORE..yes,我们应该选择,反之亦然。
对于例如:如果如果MasterTable是如下,

PAC1 STORE1 
PAC1 STORE2 
PAC2 STORE1 
PAC2 STORE2 

如果在临时表像PAC1 STORE3记录我应该只插入.. 和NOT PAC1商店2

回答

8

你有指标这些columns..that会做出改变

你也可以使用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) 

或LEFT JOIN

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 

除,确保这一个

INSERT INTO MASTERTABLE 
SELECT * FROM Staging_Tbl 
EXCEPT 
SELECT * FROM MASTERTABLE 

测试表现我自己喜欢NOT EXISTS最好

Select all rows from one table that don't exist in another table见OUTER的使用APPLY和除了同样做

+1

LEFT JOIN版本需要一些修复。你想选择'S. *'而不是'*'。 – 2011-04-05 17:38:38

+0

+1 - 无论如何只要使用'EXISTS',它就会运行得更快。 – JNK 2011-04-05 17:39:13

+0

修正了左连接问题,谢谢 – SQLMenace 2011-04-05 17:40:40

1
INSERT MASTERTABLE 
SELECT * FROM Staging_Tbl S 
WHERE NOT EXISTS 
(SELECT 1 FROM MASTERTABLE M 
WHERE M.PAC = S.PAC AND M.STORE = S.STORE)