首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Update from join返回Postgres中其他表的id

在PostgreSQL中,可以使用UPDATE语句结合JOIN操作来更新来自其他表的数据。这种操作通常用于根据其他表中的条件更新目标表中的数据。

具体的语法如下:

代码语言:sql
复制
UPDATE 目标表
SET 列名 = 新值
FROM 表1
JOIN 表2 ON 表1.列 = 表2.列
WHERE 条件;

其中,目标表是要更新的表,列名是要更新的列,新值是要设置的新值。表1和表2是要连接的表,通过ON子句指定连接条件。WHERE子句可选,用于指定更新的条件。

这种操作在以下情况下非常有用:

  • 当你需要根据其他表中的数据来更新目标表中的数据时。
  • 当你需要根据连接条件来过滤要更新的数据时。

以下是一个示例:

假设我们有两个表:users和orders。我们想要根据orders表中的数据更新users表中的数据,具体更新users表中的age列为orders表中的age列。

代码语言:sql
复制
UPDATE users
SET age = orders.age
FROM orders
WHERE users.id = orders.user_id;

在这个例子中,我们使用了UPDATE语句结合JOIN操作来更新users表中的age列。我们将orders表中的age列的值赋给了users表中的age列。连接条件是users表的id列与orders表的user_id列相等。

这样,我们就可以根据其他表中的数据来更新目标表中的数据了。

腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

postgresql 触发器 简介(转)

– 把before for each row的触发器删掉, 再测试插入 : postgres=# drop trigger tg02 on t_ret; DROP TRIGGER postgres=# drop trigger tg2 on t_ret; DROP TRIGGER postgres=# insert into t_ret values(1,’digoal’,now()); NOTICE: 00000: tg01 LOCATION: exec_stmt_raise, pl_exec.c:2840 NOTICE: 00000: tg1 LOCATION: exec_stmt_raise, pl_exec.c:2840 NOTICE: 00000: tg03, after for each row 的触发器函数返回空, 不影响后续的触发器是否被调用. 因为只要表上面发生了真正的行操作, after for each row就会被触发, 除非when条件不满足. (这个后面会讲到) LOCATION: exec_stmt_raise, pl_exec.c:2840 NOTICE: 00000: tg3 LOCATION: exec_stmt_raise, pl_exec.c:2840 NOTICE: 00000: tg04 LOCATION: exec_stmt_raise, pl_exec.c:2840 NOTICE: 00000: tg4 LOCATION: exec_stmt_raise, pl_exec.c:2840 INSERT 0 1 – 有数据插入. 这也说明了before for each statement的返回值为空并不会影响数据库对行的操作. 只有before for each row的返回值会影响数据库对行的操作. postgres=# select * from t_ret ; id | info | crt_time —-+——–+—————————- 1 | digoal | 2013-03-10 16:50:39.551481 (1 row)

02

PostgreSQL 使用advisory lock或skip locked消除行锁冲突, 提高几十倍并发更新效率

背景 通常在数据库中最小粒度的锁是行锁,当一个事务正在更新某条记录时,另一个事务如果要更新同一条记录(或者申请这一条记录的锁),则必须等待锁释放。 通常持锁的时间需要保持到事务结束,也就是说,如果一个长事务持有了某条记录的锁,其他会话要持有这条记录的锁,可能要等很久。 如果某张表的全表或者大部分记录要被更新的话,有几种做法。 1. 在一个事务中更新需要更新的记录,很显然时间可能很长,因为没有了并发。 2. 在多个事务中更新不同的记录,使用高并发来缩短更新的时间,但是就需要解决并发更新时存在的行锁冲突的问题。

06
领券