HSQLDB -Query - 如果不存在则插入第一条记录
Posted
技术标签:
【中文标题】HSQLDB -Query - 如果不存在则插入第一条记录【英文标题】:HSQLDB -Query - insert first record if does not exist 【发布时间】:2017-02-09 15:22:48 【问题描述】:注意:这个问题专门针对 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 语句中使用。
【问题讨论】:
您的 INSERT 看起来有问题。当新数据不存在时,您要插入的新数据在哪里? @fredt:在示例查询中,新数据为3
,在选择列表和 EXISTS 子查询的 WHERE 子句中引用。
我不清楚你的问题是什么。您的“问题是”段落概述了为什么 INSERT 语句会按照您所说的去做,所以我不明白哪里有问题。是否有其他一些 DBMS 以某种方式以不同方式处理该问题?如果您有适当的主键约束,如果表中已经存在具有相同键数据的行,则简单的 INSERT 将无法插入;您所要做的就是决定忽略错误(您忽略了一个特定的错误条件,而不是全部)。如果您愿意,可以使用存储过程来处理。请澄清你的问题。
我的问题很简单。如果不存在,我想插入一条记录。标准 - 在第一次插入之前,表中不会有任何记录。是的。我们可以使用“IF NOT EXISTS”在 sql 中处理这些情况。查询 - 如果不存在(select * from test where column1=1) insert into test(column1) values(1);
@fredt - 我的标准是空表。除了像往常一样,我试图插入一些不存在的数据。这意味着,我不知道表是空的还是有一些记录应该为我处理。
【参考方案1】:
这是创建表语句:
CREATE TABLE test(column1 int)
这是 HSQLDB 的 INSERT 语句。它使用 SQL 标准语法并且应该也可以与 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)
【讨论】:
它不工作。正如我所描述的,最初表是空的,在这种情况下,它将返回 0 条记录作为插入并且永远不会工作。 该语句在表为空时插入一行3
。
不。我对 HSQLDB 进行了同样的尝试,但它不起作用。
我在答案中添加了 CREATE 和 SELECT 语句以及结果。
不错!它适用于 HSQL DB,但不适用于 Informix。以上是关于HSQLDB -Query - 如果不存在则插入第一条记录的主要内容,如果未能解决你的问题,请参考以下文章