sql查询逻辑 - sql server 2008

hil*_*ary 3 sql sql-server

有没有办法改善这个查询..

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

SQL*_*ace 8

你有这些列的索引......这将做出改变

你也可以使用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来执行相同操作