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)