首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >更新选定的每一行

更新选定的每一行
EN

Database Administration用户
提问于 2021-02-16 22:29:15
回答 2查看 120关注 0票数 1

我在postgresql中有一个表,比方说用户:

代码语言:javascript
运行
复制
CREATE TABLE users(
  user_id bigint NOT NULL,
  username character varying(24) NOT NULL,
  password character varying(64) NOT NULL,
  timestamp_created timestamp with time zone DEFAULT NOW() NOT NULL,
  new boolean DEFAULT FALSE NOT NULL
);

使用下面的查询,我选择所有用户

代码语言:javascript
运行
复制
SELECT * FROM users;

我想要实现的是:当选择一行时,'new‘的值应该从false更新为true。

postgresql触发器函数中没有“前/后选择”,是否有类似的内容?

编辑:我正在使用NodeJS。目前,我将返回的行的所有用户ID存储在一个数组中,并执行以下查询:

代码语言:javascript
运行
复制
UPDATE users SET new = true WHERE user_id = ANY($1);

$1是用户ID数组的占位符。

有更方便的方法吗?

EN

回答 2

Database Administration用户

发布于 2021-02-17 08:56:55

一个有点复杂的方法可能是

代码语言:javascript
运行
复制
WITH new_users AS (
   UPDATE users SET new = TRUE
   WHERE NOT new RETURNING /* all columns except "new" */
)
 SELECT /* all columns except "new" */
 FROM new_users
UNION
 SELECT /* all columns except "new" */
 FROM users;

UNION将消除重复。

票数 1
EN

Database Administration用户

发布于 2021-02-17 08:43:34

您不能通过选择来实现这一点,但是您可以这样做:

代码语言:javascript
运行
复制
UPDATE users SET new=true WHERE new=false RETURNING *

这将返回所有拥有new=false的用户,并更新表以在这些行中设置new=true。

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/285519

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档