繁体   English   中英

如何基于另一列的过滤器更新列?

[英]How to update column based on filter of another column?

我正在尝试使用过滤器来基本上更新表中的行的子集,但是当前我的查询正在更新所有值而不是预期的子集。 我不太确定自己缺少什么。

这是当前(无效) update样子。

UPDATE account_type
SET type_id = 3
FROM my_filter;

我已经能够成功选择所需的数据,只是无法弄清楚如何使更新生效。 我可以使用以下select语句正确访问字段。

SELECT account_type FROM my_filter;

但是,当我尝试更新时,它将更新每个字段。 这是包装在CTE中的(有效) join外观。

WITH my_filter AS
(
  SELECT account_type.type_id, username
  FROM account_type
  INNER JOIN user ON user.account_id = account_type.account_id
  WHERE username LIKE 'filter%'
)

您需要一个join条件。 我猜:

UPDATE account_type
    SET type_id = 3
    FROM my_filter
    WHERE account_type.type_id = my_filter.type_id;

或者,您可以这样写:

UPDATE account_type
    SET type_id = 3
    FROM user
    WHERE user.account_id = account_type.account_id AND
          user.username LIKE 'filter%';

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM