MERGE

Версии сервера

0.91.01.5.31.5.41.5.52.02.0.32.0.42.12.53.0
--------+++

Доступно в

DSQL, PSQL

Формат

  MERGE
   INTO <table or view> [ [AS] <correlation name> ]
   USING <table or view or derived table> [ [AS] <correlation name> ]
   ON <condition>
   [ merge when matched ]
   [ merge when not matched ]

merge when matched

  WHEN MATCHED THEN
   UPDATE SET <assignment list>

merge when not matched

  WHEN NOT MATCHED THEN
   INSERT [ <left paren> <column list> <right paren> ]
    VALUES <left paren> <value list> <right paren>

Описание

MERGE читает данные из исходной (USING) таблицы и вставляет(INSERT) или обновляет (UPDATE) данные в целевой (INTO) таблице, в зависимости от условия.

Должна присутствовать хотя бы одна из двух секций [merge when matched]или[merge when not matched], при чем не более одного раза каждая.

Пример

MERGE
   INTO customers c
   USING (SELECT * FROM customers_delta WHERE id > 10) cd
   ON (c.id = cd.id)
   WHEN MATCHED THEN
    UPDATE SET
     name = cd.name
   WHEN NOT MATCHED THEN
    INSERT (id, name)
     VALUES (cd.id, cd.name)

Замечание: Выполняется правое внешнее соединение между таблицами, указанными в INTO и USING, по условию . Если слева запись есть, то производится обновление, иначе вставка. Если справа так же нет записей, соответствующих условию, то вставка не производится.

См. также

SELECT, JOIN, INSERT, UPDATE

Источник

%Firebird%\doc\sql.extensions\README.merge.txt

%Firebird%\doc\Firebird_v2.1.1.ReleaseNotes.pdf

Обсуждение