1

寻找 SQL 查询来执行以下操作:

  1. 如果它们在 table2 中不存在,则将列x的所有值插入table1到列ytable2
  2. table2如果 clumn 的值在列中y不再存在,则从列中删除记录xtable1

我尝试插入或忽略插入查询,但在 sql server 2008 R2 中没有运气

4

3 回答 3

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;

一个用于测试的 SQLfiddle

于 2013-02-05T18:36:09.633 回答
2

这会将 Table1 colX 中的所有记录插入到 Table2 colY 中:

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

您不能删除列中的所有记录。但是,您可以将它们设置为 NULL,或者如果您想删除行,您也可以这样做。让我们知道。

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

或者

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

祝你好运。

于 2013-02-05T18:29:08.793 回答
1

您可以使用合并语句

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.*;
于 2013-02-05T18:38:10.900 回答