Инструменты пользователя

Инструменты сайта


Боковая панель

Введение

Статьи и часто задаваемые вопросы

Установка и настройка

Обработка ошибок

Полезные запросы SQL

Тематические группы

merge



MERGE

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

0.9 1.0 1.5.3 1.5.4 1.5.5 2.0 2.0.3 2.0.4 2.1 2.5 3.0
- - - - - - - - + + +

Доступно в

Формат

  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, по условию <condition>. Если слева запись есть, то производится обновление, иначе вставка. Если справа так же нет записей, соответствующих условию, то вставка не производится.

См. также

Источник

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

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

Обсуждение

John, 2009/12/11 10:50

Проверенно, работает!

Заменил конструкцию

     IF ( EXISTS() )
     THEN
         UPDATE ...
 
     ELSE
         INSERT ...
Только авторизованные участники могут оставлять комментарии.
merge.txt · Последние изменения: 2009/12/14 13:24 (внешнее изменение)