postgresql一条更新两个表
时间: 2023-08-05 22:08:47 浏览: 55
可以使用 PostgreSQL 的 `UPDATE` 语句结合子查询来更新两个表。
假设有两个表:`table1` 和 `table2`,它们的结构如下:
```
CREATE TABLE table1 (
id SERIAL PRIMARY KEY,
name VARCHAR(50),
age INTEGER
);
CREATE TABLE table2 (
id SERIAL PRIMARY KEY,
name VARCHAR(50),
address VARCHAR(100)
);
```
现在需要更新 `table1` 中的一条记录,并且同时更新 `table2` 中与之相关的记录。假设要更新 `table1` 中 `id`=1 的记录的 `name` 和 `age` 字段,同时更新 `table2` 中 `name` 为原始记录 `name` 值的记录的 `address` 字段。
可以使用以下 SQL 语句实现:
```
WITH updated_table1 AS (
UPDATE table1 SET name='new_name', age=30 WHERE id=1 RETURNING id, name
)
UPDATE table2 SET address='new_address' WHERE name IN (SELECT name FROM updated_table1);
```
这里使用了一个通用表表达式(CTE)来执行 `table1` 的更新,并将更新后的 `id` 和 `name` 返回。然后,通过在更新 `table2` 的语句中使用子查询,来匹配所有与 `name` 相同的记录,并更新它们的 `address` 字段。
需要注意的是,这种方式只适用于在两个表之间存在外键关系或者可以通过某种方式进行关联的情况。否则,可能需要使用其他方法来实现更新多个表的操作。