gpt4 book ai didi

sql - 将行从一个表复制到另一个表,忽略重复项

转载 作者:行者123 更新时间:2023-12-03 07:47:44 25 4
gpt4 key购买 nike

我有 2 个具有相同架构的表(srcTable1 和 destTable)。我试图将所有行从 srcTable 复制到 destTable 并忽略重复项。我想我可以添加一个带有子查询的 WHERE 子句,该子查询只会给我不重复的行。然而,它似乎不起作用。我没有插入或选择任何行。

INSERT INTO destTable
SELECT * FROM srcTable
WHERE NOT EXISTS(SELECT * FROM destTable)

我意识到我可以做这样的事情:

INSERT INTO destTable
SELECT * FROM srcTable
WHERE MyKey IN (SELECT MyKey FROM destTable)

但是,我的表有多个键,我无法想象如何使用多个键来做到这一点。

知道我做错了什么或者你有更好的想法吗?

最佳答案

您的问题是您需要子查询中的另一个 where 子句来标识重复的内容:

INSERT INTO destTable
SELECT Field1,Field2,Field3,...
FROM srcTable
WHERE NOT EXISTS(SELECT *
FROM destTable
WHERE (srcTable.Field1=destTable.Field1 and
SrcTable.Field2=DestTable.Field2...etc.)
)

正如另一位回答者所指出的,外部联接可能是一种更简洁的方法。我上面的示例只是尝试使用您当前的查询进行解释,以便更容易理解。这两种方法在技术上都可行。

INSERT INTO destTable
SELECT s.field1,s.field2,s.field3,...
FROM srcTable s
LEFT JOIN destTable d ON (d.Key1 = s.Key1 AND d.Key2 = s.Key2 AND...)
WHERE d.Key1 IS NULL

上述两种方法都假设您担心从源插入可能已经在目标中的行。如果您担心源有重复行的可能性,您应该尝试类似的操作。

INSERT INTO destTable
SELECT Distinct field1,field2,field3,...
FROM srcTable

还有一件事。我还建议在插入语句中列出特定字段,而不是使用 SELECT *。

关于sql - 将行从一个表复制到另一个表,忽略重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/656012/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com