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
Bhushan 30 Мар 2020 в 11:20
3
Какую СУБД вы используете?
 – 
demo
30 Мар 2020 в 11:26
 – 
a_horse_with_no_name
30 Мар 2020 в 23:56

1 ответ

Синтаксис обновления/присоединения 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
0
GMB 30 Мар 2020 в 21:32
Спасибо за быстрый ответ, ваш запрос обновит 310, 500 во всех строках t1?
 – 
Bhushan
30 Мар 2020 в 11:29
Есть ли решение по нему?
 – 
Bhushan
30 Мар 2020 в 20:56
@Bhushan: я обновил свой ответ другим запросом, который выбирает первую совпадающую строку. Il обновит 280, 300 для всех трех строк в t1.
 – 
GMB
30 Мар 2020 в 21:34
@Bhushan: вы действительно используете Postgres? Я думал, что видел эту информацию в вашем вопросе, но теперь я этого не делаю.
 – 
GMB
30 Мар 2020 в 21:35
Мне нужен самый высокий идентификатор строки, и я не знаю идентификатор строки в реальном сценарии, обновленная таблица в исходном сообщении
 – 
Bhushan
30 Мар 2020 в 22:42