用SQL进行条件INSERT?

Elm*_*lmi 23 sql database smallsql

我有一个数据库,不时更新数据集.在这里,可能会发生已经存在于数据库中的数据集.

目前我是第一个做的

SELECT FROM ... WHERE val1=... AND val2=...
Run Code Online (Sandbox Code Playgroud)

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

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

我正在使用SmallSQL

Dou*_*ugM 26

您可以在几乎所有关系数据库中使用单个语句和子查询来完成此操作.

INSERT INTO targetTable(field1) 
SELECT field1
FROM myTable
WHERE NOT(field1 IN (SELECT field1 FROM targetTable))
Run Code Online (Sandbox Code Playgroud)

某些关系数据库已经改进了上述语法,因为您所描述的是一项相当常见的任务.SQL Server具有MERGE包含各种选项的语法,MySQL具有可选INSERT OR IGNORE语法.

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

  • 如果您使用的是`INSERT... VALUES ('a,' 'b,' 'c')`,只需将您的语句更改为`INSERT... SELECT 'a', 'b', 'c' WHERE。 ..` 没有括号。 (4认同)

Fab*_*ler 15

我不知道SmallSQL,但这适用于MSSQL:

IF EXISTS (SELECT * FROM Table1 WHERE Column1='SomeValue')
    UPDATE Table1 SET (...) WHERE Column1='SomeValue'
ELSE
    INSERT INTO Table1 VALUES (...)
Run Code Online (Sandbox Code Playgroud)

根据where-condition,如果存在行,则更新该行,否则将插入新行.

我希望这就是你要找的东西.

  • 我不认为`IF`是标准SQL的一部分 (6认同)
  • 这是我第一次为我现在的雇主使用 MSSQL 数据库感到高兴。 (3认同)