Объединить в Table1, используя table2, table3 on (несколько условий)?Отсутствует синтаксис - PullRequest
0 голосов
/ 13 декабря 2018

У меня есть table1, table2 и table3, у них есть условие соединения, которое связано между ними.предположим, что это столбец (ID).

Таким образом, вопрос в том,

в случае использования оператора слияния, возможно ли создать синтаксис, который будет выглядеть следующим образом:

Merge into Table1 

using table2 , table3
on (table1.ID = Table2.ID , Table2.ID = Table.ID) 
when match then 
update --(definitly table1)
where
table1.something between table2.something and table2.something -- whatever :)
when not match then 
do_nothing  --I think I should type NULL here 

Если этот синтаксис неправильный, как мне вызвать две таблицы и использовать их для обновления строки в table1?

1 Ответ

0 голосов
/ 14 декабря 2018

как мне вызвать две таблицы и использовать их для обновления строки в table1?

Это может быть достигнуто несколькими способами в Oracle:

  • коррелированный подзапрос
  • встроенное представление
  • запрос на слияние

Следующий код дает необработанный, закомментированный пример третьего решения (оператор слияния).Поскольку вы не указали нам свою точную попытку SQL и структуру ваших таблиц, вам придется адаптировать ее к вашему конкретному случаю использования:

MERGE INTO table1 target
-- prepare the dataset to use during the UPDATE
USING (
    SELECT 
        -- following fields will be available in the UPDATE
        t1.id,
        t2.foo,
        t3.bar
    FROM
        -- JOIN conditions between the 3 tables
        table1 t1
        INNER JOIN table2 t2 on t2.id = t1.id
        INNER JOIN table3 t3 on t3.id = t1.id
    WHERE
       -- WHERE clause (if needed)
        t1.zoo = 'blah'
    ) source
-- search records to UPDATE 
ON  (target.id = source.id)
WHEN MATCHED THEN 
    UPDATE SET
        -- UPDATE table1 fieds
        target.value1 = source.foo,
        target.value2 = source.foo
;

Примечание: пока этот запрос использует Oracle MERGE утверждение, что концептуально не реализует реальную операцию слияния.Концепция слияния представляет собой запрос update / insert , тогда как этот запрос только обновляет и игнорирует вставляемую часть.Тем не менее, это один из самых простых способов выполнить такое коррелированное обновление в Oracle ...

...