2013-02-05 39 views
0

尋找一個SQL查詢來執行以下操作之間存在:的table1xSQL INSERT是否存在刪除如果不是2個表

  1. 全部插入值ytable2如果 它們不存在在表2
  2. table2列的刪除記錄,如果clumn y的值不會再在 的table1
x列中存在

我試圖插入或忽略在SQL Server中,沒有運氣插入查詢2008 R2

回答

3

聽起來像是一個完美的適合SQL Server MERGE;

MERGE table2 AS t2 
USING table1 AS t1 
ON (t2.y = t1.x) 
WHEN NOT MATCHED BY TARGET 
    THEN INSERT (y) VALUES(t1.x) 
WHEN NOT MATCHED BY SOURCE 
    THEN DELETE; 

An SQLfiddle to test with

2

這將插入你在表1,COLX,所有記錄到表2,科利:

INSERT INTO Table2 (ColY) 
SELECT ColX 
FROM Table1 
WHERE ColX NOT IN (SELECT ColY FROM Table2) 

你可以用」 t刪除列中的所有記錄。但是,你可以將它們設置爲NULL,或者如果你想刪除這些行,你也可以這樣做。請讓我們知道。

DELETE FROM Table2 
WHERE ColY NOT IN (SELECT ColX From Table1) 

OR

UPDATE Table2 
SET ColY = NULL 
WHERE ColY NOT IN (SELECT ColX From Table1) 

好運。

1

可以使用Merge Statement

MERGE table2 AS t2 
USING table1 AS t1 
ON (t2.y = t1.x) 
WHEN NOT MATCHED BY TARGET 
    THEN INSERT(y) VALUES(t1.x) 
WHEN NOT MATCHED BY SOURCE 
    THEN DELETE 
OUTPUT $action, inserted.*, deleted.*; 
相關問題