2017-09-15 65 views
0

在使用SQL Server Management Studio進行SQL編碼時,我可以從插入或刪除時具有不同行數的表中刪除。在我更新了表A之後,如果表B中的匹配項存在,我希望從表A中刪除匹配的項目。這個想法最終將只包含表A中已更新的行。我有10列,但將使用4把事情簡單化。如何刪除使用SQL在兩個獨立表中匹配的行?

CREATE TRIGGER utr_Updates 
ON tableA 
AFTER UPDATE 
AS BEGIN 
    SET NOCOUNT ON; 
    EXEC usp_updates 
END 

CREATE PROCEDURE usp_Updates 
AS 
BEGIN 
    IF EXISTS (SELECT * FROM tableA 
       WHERE col1 IN (SELECT DISTINCT col1 FROM tableB)) 
     DELETE FROM tableA 
     WHERE col1 IN (SELECT DISTINCT col1 FROM tableB) 

    IF EXISTS (SELECT * FROM tableA 
       WHERE col2 IN (SELECT DISTINCT col2 FROM tableB)) 
     DELETE FROM tableA 
     WHERE col2 IN (SELECT DISTINCT col2 FROM tableB) 

    IF EXISTS (SELECT * FROM tableA 
       WHERE col3 IN (SELECT DISTINCT col3 FROM tableB)) 
     DELETE FROM tableA 
     WHERE col3 IN (SELECT DISTINCT col3 FROM tableB) 

    IF EXISTS (SELECT * FROM tableA 
       WHERE col4 IN (SELECT DISTINCT col4 FROM tableB)) 
     DELETE FROM tableA 
     WHERE col4 IN (SELECT DISTINCT col4 FROM tableB) 
END 

START POINT

    START 

    TABLE A    TABLE B 
col1 W, X, Y, Z   col1 W, X, Y, Z 
col2 1, 2, 3, 4   col2 1, 2, 3, 4 
col3 A, 5, 6, D   col3 A, 5, 6, D 
col4 7, B, C, D   col3 7, B, C, D 

表A更新時間COL1和COL3

   AFTER UPDATE 

    TABLE A    TABLE B 
col1 W, S, Y, Z   col1 W, X, Y, Z 
col2 1, 2, 3, 4   col2 1, 2, 3, 4 
col3 A, 5, 1, D   col3 A, 5, 6, D 
col4 7, B, C, D   col3 7, B, C, D 

期望的結果

 TABLE A 
col1 W, S, Y, Z 
col3 A, 5, 1, D 

回答

0

您可以使用NOT EXISTS

select a.* 
from a 
where not exists (select 1 
        from b 
        where b.col1 = a.col1 and b.col2 = a.col2 and b.col3 = a.col3 and b.col4 = a.col4 
       ); 

或者,在SQL Server中,你可以使用EXCEPT

select a.* 
from a 
except 
select b.* 
from b; 
相關問題