SQL запрос на обновление таблицы соединения - PullRequest
1 голос
/ 30 марта 2020
UPDATE 
    t1
SET 
    t1.c3 = t2.c3,
    t1.c4 = t1.c4 
FROM 
    t1
    LEFT JOIN t2 ON t1.c1 = t2.c1 AND t1.c2 = t2.c2
WHERE 
    t1.c5 = 'In Progrss'

Я хочу обновить значение из верхней строки таблицы t2.

Например, в таблице t2, имеющей 3 строки с критериями, совпадающими только со значением верхней строки update in t1 table(ROW ID 3 VALUES TO UPDATE IN t1 table).

Таблица t2:

id  c1      c2     c3     c4
-----------------------------
1   ABC     XYZ    280    300
2   ABC     XYZ    290    400
3   ABC     XYZ    310    500
4   PQR     STR    210    400

Таблица t1:

id  c1      c2     c3     c4   c5
----------------------------------
1   ABC     XYZ                In Progrss
5   ABC     XYZ                In Progrss
8   ABC     XYZ                In Progrss
15  PQR     STR                IN Progress

1 Ответ

0 голосов
/ 30 марта 2020

Синтаксис обновления / объединения Postgres выглядит следующим образом:

update t1
set c3 = t2.c3, c4 = t1.c4
from t2
where 
    t1.c1 = t2.c1 
    and t1.c2 = t2.c2
    and t1.c5 = 'In Progress'

Если в t2 есть несколько совпадающих строк, и вам нужна строка с наименьшим id, то вы можете использовать row_number() в подзапросе:

update t1
set c3 = t2.c3, c4 = t1.c4
from (select t2.*, row_number() over(partition by c1, c2 order by id) rn from t2) t2
where 
    t1.c1 = t2.c1 
    and t1.c2 = t2.c2
    and t1.c5 = 'In Progress'
    and t2.rn = 1
...