PostgreSQL - Как найти одно и то же значение в нескольких таблицах и обновить таблицу? - PullRequest
0 голосов
/ 05 февраля 2020

У меня есть 2 таблицы, как показано ниже T1 и T2 in PostgreSQL. Я хочу обновить значения v2 и v3 в T1 в соответствии со значением в T2. Например, оба T1 и T2 имеют одинаковое значение v1 (1 и 2), поэтому я хочу передать значение v2 и v3 в T2 (a, b, c, d) в T1.

T1

v1    v2    v3
1     NULL  NULL
2     NULL  NULL
3     NULL  NULL

T2

v1    v2    v3
1     a     b
2     c     d
4     e     f

Желаемый выход

T1

v1    v2    v3
1     a     b
2     c     d
3     NULL  NULL

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

SELECT *
FROM t1
WHERE
t1.v1 = t2.v1

1 Ответ

1 голос
/ 05 февраля 2020

Я полагаю, вы хотите использовать синтаксис UPDATE ... FROM:

UPDATE t1 SET v2 = t2.v2, v3 = t2.v3 FROM t2 WHERE t1.v1=t2.v1;

Рабочий пример:

create table t1 (v1 int, v2 text, v3 text);
create table t2 (v1 int, v2 text, v3 text);
insert into t1 values (1,null,null),(2, null, null),(3, null,null);
insert into t2 values (1,'a','b'),(2,'c','d'),(4,'e','f');


postgres=# select * from t1;
 v1 | v2 | v3 
----+----+----
  1 |    | 
  2 |    | 
  3 |    | 
postgres=# UPDATE t1 SET v2 = t2.v2, v3 = t2.v3 FROM t2 WHERE t1.v1=t2.v1;
UPDATE 2
postgres=# select * from t1 order by v1;
 v1 | v2 | v3 
----+----+----
  1 | a  | b
  2 | c  | d
  3 |    | 

И кстати, правильный синтаксис SELECT:

SELECT *
FROM t1, t2
WHERE
t1.v1 = t2.v1

Раскрытие информации: я работаю на EnterpriseDB (EDB)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...