У меня есть пустая таблица, и я хотел бы вставить какую-то строку, если ее еще нет. Я пробовал 3 (основных) варианта утверждений. Первый работает, второй ошибку не выдает но ничего не вставляет, третий вообще выдает ошибку.
Я хотел бы понять, почему второе утверждение ничего не делает.
Первый (вставляет):
MERGE INTO tags ta USING
(VALUES 91852, 'G') temp (fid, tag)
ON temp.fid = ta.fid
WHEN NOT MATCHED THEN
INSERT (fid, tag) VALUES (temp.fid, temp.tag);
Второй (не вставляет):
MERGE INTO tags ta USING
(SELECT fid, tag FROM tags i WHERE i.fid=91852 AND i.tag='G') temp (fid, tag)
ON temp.fid = ta.fid
WHEN NOT MATCHED THEN
INSERT (fid, tag) VALUES (91852, 'G');
Если SELECT ничего не возвращает, тогда должен срабатывать оператор NOT MATCHED, верно?
Третий (с ошибкой):
sql> MERGE INTO tags ta USING
(SELECT fid, tag FROM tags i WHERE i.fid=91852 AND i.tag='G') temp (fid, tag)
ON temp.fid = ta.fid
WHEN NOT MATCHED BY temp THEN
INSERT (fid, tag) VALUES (91852, 'G');
+> +> +> +> SEVERE SQL Error at '<stdin>' line 183:
"MERGE INTO tags ta USING
(SELECT fid, tag FROM tags i WHERE i.fid=91852 AND i.tag='G') temp (fid, tag)
ON temp.fid = ta.fid
WHEN NOT MATCHED BY temp THEN
INSERT (fid, tag) VALUES (91852, 'G')"
unexpected token: BY required: THEN : line: 4
sql> sql>
Последняя версия была вдохновлена https://stackoverflow.com/a/30938729/4142984, которая предназначена для sql-сервера. , а не для hsqldb.