从一个 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