我对运行特定类型的查询有疑问。 这是一个例子:我有2个表X和Y
Table X
1@abc.com
2@abc.com
3@abc.com
我现在想将一切都移到表Y. 所以现在,表Y看起来就像表X
我现在删除表X中的所有内容,除了1 @ abc.com 所以新的表X看起来像这样:
Table X
1@abc.com
让我说我偶然做了这件事,我现在想把表Y中的所有东西都移回X,除了匹配的记录(在这种情况下,将是1 @ abc.com)
我该怎么做?
答案 0 :(得分:10)
您可以使用EXCEPT
关系运算符:
INSERT INTO X
SELECT * FROM Y
EXCEPT
SELECT * FROM X
还有互补的INTERSECT
和更为人熟知的UNION
运营商。
答案 1 :(得分:3)
接近下面的东西应该这样做。但是要注意NULL - 你需要确保LEFT JOIN上的条件能够应对这些条件。
INSERT INTO X
SELECT *
FROM Y
LEFT JOIN X
ON X.field1 = Y.field1
AND X.field2 = Y.field2
AND ...
WHERE X.field1 IS NULL
答案 2 :(得分:1)
为什么不删除表X中的所有内容,然后只需将表Y中的所有内容复制回表X?
答案 3 :(得分:1)
您需要EXCEPT关键字
INSERT TableX
SELECT * FROM TableY
EXCEPT
SELECT ID FROM TABLEX
答案 4 :(得分:0)
首先,我将做一个假设,以便于演示解决方案。这个假设只是X和Y有一个名为id的主键列。
INSERT INTO X (id, col1, col2, ...col(n))
SELECT Y.id, Y.col1, Y.col2, ...Y.col(n)
FROM Y
LEFT OUTER JOIN X
ON X.id = Y.id
WHERE X.id is NULL;
此方法将缺少的行从Y插入到X中。有关这方面的一个很好的示例,请参阅Kathi Kellenberger撰写的本书 Beginning T-SQL 2008 ,第190-191页。