1

次のことを行うSQLクエリを探しています。

  1. table2に存在しない場合は、の列のすべての値をの列に挿入xしますtable1ytable2
  2. table2clumnの値がの列にyもう存在しない場合は、列からレコードを削除しますxtable1

SQL Server2008R2で挿入クエリを挿入または無視しようとしましたがうまくいきませんでした

4

3 に答える 3

3

SQLServerに最適のように聞こえます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 に答える