HSQLDB -Query - вставить первую запись, если она не существует

Примечание: этот вопрос специально для 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.

1 ответ

Это оператор CREATE:

CREATE TABLE test(column1 int)

Это оператор INSERT для HSQLDB. Он использует синтаксис стандарта 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, вам необходимо создать отдельную таблицу с одной строкой, аналогично таблице DUAL в Oracle. Затем вы используете эту таблицу внутри SELECT.

INSERT INTO test(column1) 
    SELECT 3 FROM single_row_table 
    WHERE NOT EXISTS (SELECT * FROM test  WHERE column1 =3)
Другие вопросы по тегам