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 ответ
Синтаксис обновления/присоединения 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
t1
.
Похожие вопросы
Новые вопросы
sql
Язык структурированных запросов (SQL) - это язык запросов к базам данных. Вопросы должны включать примеры кода, структуру таблицы, примеры данных и тег для используемой реализации СУБД (например, MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 и т. Д.). Если ваш вопрос относится исключительно к конкретной СУБД (использует определенные расширения / функции), используйте вместо этого тег этой СУБД. Ответы на вопросы, помеченные SQL, должны использовать стандарт ISO / IEC SQL.