从一个 table 插入或查看另一个但避免组合重复 - 这可以在 SQL 中完成吗?如果是这样怎么办?
Inserting from one table or view into another but avoid combination duplicates- Can this be done in SQL? If so how?
我有一个 table,它有一个主键 WORKITEMID,以及以下 3 个外键 PRODSERVID、PROCESSID 和 TASKKNOWID。
我有一个可以创建的视图,它还具有 PRODSERVID、PROCESSID 和 TASKKNOWID。此视图通常包含上面 table 中的所有记录以及一些新记录 - 不在 table 中。根据定义,'table' 用于保存 PRODSERVID、PROCESSID 和 TASKKNOWID 的唯一组合。
我想从视图中插入 table 视图中 table 中不存在的任何新组合。而且我不想覆盖 INSERT 中的现有 WORKITEMID,因为这些 WORKITEMID 已在别处使用。
这可以在 SQL 中完成吗?
谢谢
当然,最简单的标准形式是使用 EXISTS()
的否定
INSERT INTO [TableName] (PRODSERVID,PROCESSID,TASKKNOWID,... )
SELECT PRODSERVID,PROCESSID,TASKKNOWID,...
FROM [ViewName] v
WHERE NOT EXISTS (
SELECT 1 FROM [TableName] t
WHERE t.PRODSERVID = v.PRODSERVID AND t.PROCESSID = v.PROCESSID AND t.TASKKNOWID = v.TASKKNOWID
)
用您的其他字段替换 ...
您也可以使用非关联外部联接,但我发现不存在会使意图更加清晰。
There is a good comparison of the different approaches to this issue in this article: T-SQL commands performance comparison – NOT IN vs SQL NOT EXISTS vs SQL LEFT JOIN vs SQL EXCEPT
我有一个 table,它有一个主键 WORKITEMID,以及以下 3 个外键 PRODSERVID、PROCESSID 和 TASKKNOWID。
我有一个可以创建的视图,它还具有 PRODSERVID、PROCESSID 和 TASKKNOWID。此视图通常包含上面 table 中的所有记录以及一些新记录 - 不在 table 中。根据定义,'table' 用于保存 PRODSERVID、PROCESSID 和 TASKKNOWID 的唯一组合。
我想从视图中插入 table 视图中 table 中不存在的任何新组合。而且我不想覆盖 INSERT 中的现有 WORKITEMID,因为这些 WORKITEMID 已在别处使用。
这可以在 SQL 中完成吗?
谢谢
当然,最简单的标准形式是使用 EXISTS()
的否定INSERT INTO [TableName] (PRODSERVID,PROCESSID,TASKKNOWID,... )
SELECT PRODSERVID,PROCESSID,TASKKNOWID,...
FROM [ViewName] v
WHERE NOT EXISTS (
SELECT 1 FROM [TableName] t
WHERE t.PRODSERVID = v.PRODSERVID AND t.PROCESSID = v.PROCESSID AND t.TASKKNOWID = v.TASKKNOWID
)
用您的其他字段替换 ...
您也可以使用非关联外部联接,但我发现不存在会使意图更加清晰。
There is a good comparison of the different approaches to this issue in this article: T-SQL commands performance comparison – NOT IN vs SQL NOT EXISTS vs SQL LEFT JOIN vs SQL EXCEPT