注意:此问题专门针对HSQLDB和Informix。
如果表中不存在,我想插入新条目,我知道我们可以使用存在查询根据现有条目插入。
例如:
INSERT INTO test(column1)
(SELECT DISTINCT 3
FROM test
WHERE NOT EXISTS (SELECT * FROM test WHERE column1 =3));
问题是:如果子查询返回至少一行,则EXISTS条件与子查询结合使用并被视为满足。然后我们只能在SELECT,INSERT,UPDATE或DELETE语句中使用。
答案 0 :(得分:2)
这是CREATE表语句:
CREATE TABLE test(column1 int)
这是HSQLDB的INSERT语句。它使用SQL Standard语法,也应该与Informix一起使用:
INSERT INTO test(column1)
SELECT * FROM (VALUES (3))
WHERE NOT EXISTS (SELECT * FROM test WHERE column1 =3)
这是用于显示表中行的SELECT语句
SELECT * FROM test
这是SELECT
的结果 COLUMN1
-------
3
1 row(s) in 0 ms
由于Informix不支持VALUES表构造函数,因此需要创建一个只包含一行的单独表,类似于Oracle的DUAL表。然后在SELECT中使用该表。
INSERT INTO test(column1)
SELECT 3 FROM single_row_table
WHERE NOT EXISTS (SELECT * FROM test WHERE column1 =3)