У меня есть две таблицы:
A [ID, column1, column2, column3]
B [ID, column1, column2, column3, column4]
A
всегда будет подмножество B
(значение всех столбцов A
находятся также в B
).
Я хочу обновить запись с определенным ID
в B
с их данными из A
для всех столбцов A
. Это ID
существует оба в A
и B
.
Есть ли UPDATE
синтаксис или какой-либо другой способ сделать это, не указывая имена столбцов, просто говоря "установило все столбцы A"?
Я использую PostgreSQL, таким образом, определенная нестандартная команда также принята (однако, не предпочтена).
вы можете создать и выполнить динамический sql для этого, но это действительно не идеально
Попробуйте следовать
Update A a, B b, SET a.column1=b.column1 where b.id=1
EDITED: - Обновить более одного столбца
Update A a, B b, SET a.column1=b.column1, a.column2=b.column2 where b.id=1
Вы можете использовать нестандартное предложение FROM.
UPDATE b
SET column1 = a.column1,
column2 = a.column2,
column3 = a.column3
FROM a
WHERE a.id = b.id
AND b.id = 1
Не обязательно то, что вы просили, но, может быть, использование наследования postgres может помочь?
CREATE TABLE A (
ID int,
column1 text,
column2 text,
column3 text
);
CREATE TABLE B (
column4 text
) INHERITS (A);
Это позволяет избежать необходимости обновлять B.
Но обязательно прочтите все подробности .
В противном случае то, о чем вы просите, не считается хорошей практикой - динамические вещи, такие как представления с SELECT * ...
, не приветствуются (поскольку такое небольшое удобство может больше сломать, чем помочь), и то, что вы просите, будет эквивалентно команде UPDATE ... SET
.