sql - 使用 CASE 和 RETURNING 的 Postgres UPDATE 返回所有行

标签 sql postgresql sql-update sql-returning

我在 postgres 中执行以下查询:

 UPDATE products SET dealer_id = 
                        CASE
                             WHEN order_id = 7 THEN '1' 
                             WHEN order_id = 6 THEN '2' 
                             ELSE dealer_id
                        END 
                        RETURNING id 

我希望得到像 [3,4,5] 这样的更新行的 ID,但它返回所有行的 ID

我的查询有什么问题?

最佳答案

您正在更新所有行。

  • 当 order_id 为“7”时,您将 dealer_id 设置为 1。
  • 当 order_id 为“6”时,您将 dealer_id 设置为 2。
  • 对于 order_id 的所有其他值,您将 dealer_id 设置为 dealer_id。 (这似乎是一件奇怪的事情。)

在没有更多信息的情况下,我不愿提出任何建议,但这可能更接近您想要的。

UPDATE products 
SET dealer_id = CASE
                    WHEN order_id = 7 THEN '1' 
                    WHEN order_id = 6 THEN '2' 
                END 
WHERE order_id in (7, 6)
RETURNING id 

关于sql - 使用 CASE 和 RETURNING 的 Postgres UPDATE 返回所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52481170/

相关文章:

mysql - 维护 MySQL 数据库中的修订历史记录

postgresql - 如何指定Postgresql客户端版本以防止服务器版本不匹配?

sql触发器消失

mysql - MySQL 中何时使用单引号、双引号和反引号

python:如何使用内存数据库测试我的数据库模型?

sql - 更新行组以从行 SQL 的总和中删除特定的总金额

MySQL 更新后自动更新列

mysql - 更新表中的最小值

sql - 如何对具有 NULL 值的字段进行分组?

java - 如何中止 JDBC Postgresql CopyManager 复制?