Oracle merge delete: BASE — MERGE Statement Enhancements in Oracle Database 10g
Объяснение инструкции MERGE в SQL
Улучшение статьи
Сохранить статью
- Уровень сложности:
Hard - Последнее обновление:
09 Сен, 2021
Улучшить статью
Сохранить статью
Предварительное условие — Оператор MERGE
Поскольку оператор MERGE в SQL, как обсуждалось ранее в предыдущем посте, представляет собой комбинацию трех операторов INSERT, DELETE и UPDATE. Итак, если есть Исходная таблица и Целевая таблица , которые должны быть объединены, то с помощью оператора MERGE все три операции (INSERT, UPDATE, DELETE) могут быть выполнены одновременно.
Простой пример пояснит использование инструкции MERGE.
Пример:
Предположим, что есть две таблицы:
- PRODUCT_LIST , которая содержит текущие сведения о доступных продуктах с полями P_ID, P_NAME и P_PRICE, соответствующими идентификатору, названию и цене каждого продукт.
- UPDATED_LIST , которая представляет собой таблицу, содержащую новые сведения о продуктах, доступных с полями P_ID, P_NAME и P_PRICE, соответствующими идентификатору, названию и цене каждого продукта.
Задача состоит в том, чтобы обновить сведения о продуктах в PRODUCT_LIST в соответствии с UPDATED_LIST.
Решение
Теперь, чтобы лучше объяснить этот пример, давайте разделим его на этапы.
Шаг 1: Распознайте ЦЕЛЬ и ИСТОЧНИК таблицы
Таким образом, в этом примере, поскольку предлагается обновить продукты в PRODUCT_LIST в соответствии с UPDATED_LIST, следовательно, PRODUCT_LIST будет действовать как TARGET, а UPDATED_LIST будет действовать как таблица SOURCE.
Шаг 2: Распознайте операции, которые необходимо выполнить.
Теперь, как видно, есть три несоответствия между таблицей TARGET и SOURCE, а именно:
1. Стоимость КОФЕ в TARGET составляет 15,00, а в SOURCE – 25,00
СПИСОК_ПРОДУКТОВ 102 КОФЕ 15.00 ОБНОВЛЕНО_СПИСОК 102 КОФЕ 25.00
2. В SOURCE нет продукта BISCUIT, но он есть в TARGET
PRODUCT_LIST 103 BISCUIT 20.00
3. Продукта CHIPS нет в TARGET, но он есть в SOURCE
UPDATED_LIST 104 ЧИПЫ 22.00
Следовательно, в МИШЕНИ необходимо выполнить три операции по указанным выше несоответствиям. Это:
1. Операция ОБНОВЛЕНИЕ
102 КОФЕ 25.00
2. Операция DELETE
103 ПЕЧЕНЬЕ 20.00
3. Операция INSERT
104 CHIPS 22.00
2 9 Запрос SQL 3:
Примечание. Обратитесь к этому сообщению за синтаксисом оператора MERGE.
SQL-запрос для выполнения вышеуказанных операций с помощью оператора MERGE :
3 check
for
change
in
P_NAME
or
P_PRICE */
ON
(TARGET.P_ID = SOURCE.P_ID)
WHEN
Соответствует
и
target.p_name <> source.p_name
или
Target.p_price <> source.p_price
или
.0115
/*
Update
the records
in
TARGET */
THEN
UPDATE
SET
TARGET.
P_NAME = SOURCE. P_NAME,
Target.p_price = Source.p_price
/* 2. Выполнение
/* 2.0114 INSERT
operation */
/*
When
no
records are matched
with
TARGET
table
Then
insert
the записи
в
цель
таблица
*/
КОГДА
НЕ
1 СООТВЕТСТВУЕТ0115
Цель
Затем
Вставка
(P_ID, P_NAME, P_PRICE)
Значения
(Source.
prise.prise.poursire.pround.
/* 3. Выполнение
Удалить
Операция* /
/*
, когда
NO
Записки соответствуют
.0115
with
SOURCE
table
Then
delete
the records
from
the target
table
*/
WHEN
NOT
MATCHED
по
Источник
Затем
Удалить
/*
Конец
из
/*
Конец
из
/*
0115
ОБЪЕДИНЕНИЕ */
|
Вывод:
PRODUCT_LIST
P_ID P_NAME P_PRICE
101 ЧАЙ 10.
00
102 КОФЕ 25.00
104 CHIPS 22.00
Таким образом, мы можем выполнять все эти три основных оператора в SQL вместе с помощью оператора MERGE.
Примечание: В синтаксисе MERGE можно использовать любое имя, кроме целевого и исходного. Они используются только для того, чтобы дать вам лучшее объяснение.
Статьи по теме
Использование MERGE в SQL Server для одновременной вставки, обновления и удаления — Abbey Code
Использование MERGE в SQL Server для одновременной вставки, обновления и удаления — Abbey Code
Использование MERGE в SQL Server для одновременной вставки, обновления и удаления
В типичном приложении для хранения данных довольно часто во время цикла ETL необходимо выполнять операции INSERT, UPDATE и DELETE в таблице target путем сопоставления записей из таблицы source . Например, таблица измерения продуктов содержит информацию о продуктах, и вам необходимо синхронизировать эту таблицу с последней информацией о продуктах из исходной таблицы. Вам нужно будет написать отдельные операторы INSERT, UPDATE и DELETE, чтобы обновить целевую таблицу с обновленным списком продуктов или выполнить поиск.
Хотя на первый взгляд это кажется простым, это становится громоздким, когда вы делаете это очень часто или на нескольких таблицах, даже при таком подходе производительность значительно снижается. В этом совете мы рассмотрим, как использовать оператор MERGE и сделать это за один проход.
Начиная с SQL Server 2008, вы можете использовать команду MERGE для выполнения этих операций в одной инструкции. Эта новая команда похожа на команду Oracle UPSERT (объединение слов UPDATE и INSERT.), где она вставляет несуществующие строки и обновляет существующие строки. С введением команды MERGE разработчики могут более эффективно обрабатывать распространенные сценарии работы с хранилищами данных, например проверять, существует ли строка, а затем выполнять INSERT, UPDATE или DELETE.
Оператор MERGE в основном объединяет данные из исходного результирующего набора в целевую таблицу на основе заданного вами условия и того, существуют ли данные из источника в целевом объекте или нет. Новая команда SQL объединяет последовательность условных команд INSERT, UPDATE и DELETE в одном атомарном операторе в зависимости от наличия записи.
Новая команда MERGE выглядит следующим образом:
Оператор MERGE в основном работает как отдельные операторы INSERT, UPDATE и DELETE внутри одного оператора. Вы указываете набор записей «Исходный» и таблицу «Цель», а также соединение между ними. Затем вы указываете тип модификации данных, которая должна происходить, когда записи между двумя данными совпадают или не совпадают. MERGE очень полезен, особенно когда речь идет о загрузке таблиц хранилища данных, которые могут быть очень большими и требуют выполнения определенных действий при наличии или отсутствии строк.
Как начать работу с командой SQL Server Merge?
Как начать работу с командой SQL Server Merge?
Команда SQL Server MERGE представляет собой комбинацию команд INSERT, UPDATE и DELETE, объединенных в одну инструкцию. Вот как начать работу с командой SQL Server MERGE:
Начните с определения целевой таблицы, которая будет использоваться в логике.
Затем определите исходную таблицу, которая будет использоваться в логике.