2013-02-05 42 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.*; 
相关问题