Как обновить TABLE1 значениями из TABLE2, не задавая столбцы из TABLE1 для конкретных отдельных операторов выбора? - PullRequest
0 голосов
/ 13 января 2019

Я хочу обновить одну таблицу со значениями из другой таблицы, если эти значения существуют. Я использую RunSqlTasklet в Spring для запуска этого SQL, но на самом деле буду использовать postgres, и моя версия не может обрабатывать слияния, поэтому, пожалуйста, никаких ответов на слияния.

Пример:

TABLE1

TABLE2

После обновления хочу, чтобы таблица 1 выглядела как ниже TABLE1_updated

Приведенное ниже описание работает, но выполнение отдельной, определенной части столбца снова и снова, кажется, можно улучшить.

UPDATE schema.TABLE1 t1
SET  COLUMN1 = (SELECT t2.COLUMN1 FROM schema.TABLE2 t2 WHERE t1.COLUMN4 = t2.COLUMN4 AND t1.COLUMN5 = t2.COLUMN5)
    ,COLUMN2 = (SELECT t2.COLUMN2  FROM schema.TABLE2 t2 WHERE t1.COLUMN4 = t2.COLUMN4 AND t1.COLUMN5 = t2.COLUMN5)
    ,COLUMN3 = (SELECT t2.COLUMN3 FROM schema.TABLE2 t2 WHERE  t1.COLUMN4 = t2.COLUMN4 AND t1.COLUMN5 = t2.COLUMN5)
WHERE EXISTS (
              SELECT 1 FROM schema.TABLE2 t2 
              WHERE t1.COLUMN4 = t2.COLUMN4
              AND t1.COLUMN5 = t2.COLUMN5
              );

Как обновить вышеприведенный запрос, чтобы обновить TABLE1 значениями из TABLE2, не задавая столбцы из TABLE1 для конкретных отдельных операторов выбора, указанных выше?

У меня есть Google, и вышеприведенное - единственное, что, похоже, работает, но я так не думаю.

Ответы [ 2 ]

0 голосов
/ 13 января 2019

вы тоже можете это сделать

--Select *
Update T1 
SET    t1.COLUMN1 = t2.COLUMN1,
       t1.COLUMN2 = t2.COLUMN2,
       t1.COLUMN3 = t2.COLUMN3
 from schema.Table1 T1 Inner JOIN
      schema.Table2 T2
           on T1.Column4 =T2.Column4 and t1.COLUMN5 = t2.COLUMN5 
0 голосов
/ 13 января 2019

Вы можете использовать синтаксис update-join. По сути, вам просто нужно добавить предложение from с таблицей2 и предложение where с условием соединения (и любым другим условием, которое вам может потребоваться, конечно):

UPDATE schema.TABLE1 t1
SET    t1.COLUMN1 = t2.COLUMN1,
       t1.COLUMN2 = t2.COLUMN2,
       t1.COLUMN3 = t2.COLUMN3
FROM   schema.TABLE2 t2
WHERE  t1.COLUMN4 = t2.COLUMN4 AND t1.COLUMN5 = t2.COLUMN5
...