Обновите таблицу со значением из другой таблицы.PL SQL - PullRequest
0 голосов
/ 19 октября 2018

Я часто использую ниже JOIN и UPDATE для переноса значения из одной таблицы в другую в TSQL.

UPDATE T1
SET T1.Mobile = T2.Mobile
FROM Table1 T1 INNER JOIN Table2 T2 ON T1.ID = T2.ID

Затем я нашел в PL SQL, синтаксис для такого обновления либо с помощью MERGE,или заявление о гнезде.

В любом случае, как представляется, не все так просто, как в решении TSQL, поэтому меня интересует, действительно ли разработчик PL SQL выполняет такое обновление кросс-таблицы, или существует другой принцип разработки, который делает такое обновление ненужным.

Один комментарий, который я получил от разработчика PL SQL, заключается в том, что они предпочитают создать представление, подобное

CREATE VIEW MyView AS
(
SELECT T1.Filed1, T1.Field2, T2.Mobile 
FROM Table1 T1 INNER JOIN Table2 T2 ON T1.ID = T2.ID
);

. Это похоже на жизнеспособное решение, принимая во внимание тот факт, что объединение не вносит дубликаты в Table1 / MyView.или положить логику дедупликации выше.Одним из очевидных преимуществ для этого является то, что мы можем продолжить обновление Table2.Mobile, и MyView всегда будет иметь обновленное значение.

Я ищу комментарий к принципу кодирования.:)

Ответы [ 2 ]

0 голосов
/ 19 октября 2018

Вы должны использовать этот запрос для внутреннего объединения.Без условия where это просто левое соединение, которое может состоять из пустых мобильных данных из T2

UPDATE Table1 T1
SET T1.Mobile = (SELECT min(Mobile) FROM Table2 T2 WHERE T1.ID = T2.ID)
where T1.ID in (SELECT T2.ID FROM Table2 T2)
;
  • И с max (Mobile) вы предотвращаете ошибку, когда у вас есть 1:n отношение для T1: T2.
  • Чтобы ускорить операторы, вы должны создать индексы для T1.ID и T2.ID
0 голосов
/ 19 октября 2018

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

UPDATE Table1 T1
SET T1.Mobile = (SELECT Mobile FROM Table2 T2 WHERE T1.ID = T2.ID);
...