一尘不染

是否使用SQL进行条件INSERT?

sql

我有一个不时更新数据集的数据库。在这里,可能发生的是交付了数据库中已经存在的数据集。

目前,我首先要做的是

SELECT FROM ... WHERE val1=... AND val2=...

检查是否已经存在具有这些数据的数据集(使用WHERE语句中的数据)。如果没有返回任何值,则说明我正在执行INSERT。

但这对我来说似乎有点复杂。所以我的问题是:是否有某种条件式INSERT仅在不存在新数据集的情况下才添加它?

我正在使用 SmallSQL


阅读 156

收藏
2021-03-10

共1个答案

一尘不染

您几乎可以在所有关系数据库中使用一个语句和一个子查询来做到这一点。

INSERT INTO targetTable(field1) 
SELECT field1
FROM myTable
WHERE NOT(field1 IN (SELECT field1 FROM targetTable))

某些关系数据库已针对上述内容改进了语法,因为您所描述的是相当常见的任务。SQL
Server具有MERGE各种选项的语法,而MySQL具有可选的INSERT OR IGNORE语法。

编辑:
SmallSQL的文档是稀疏的,因为它实现了SQL标准的哪些部分。它可能不会实现子查询,因此,如果您需要坚持使用SmallSQL,则可能无法遵循上述建议或其他任何建议。

2021-03-10