Postgres UPDATE 使用 CASE 返回 returns 所有行
Postgres UPDATE using CASE with RETURNING returns all rows
我在 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,但 returns 所有行的 ID
我的查询有什么问题?
您可能缺少 where 条件(过滤条件)。当前查询将匹配所有行并尝试根据 case 表达式影响它们。
您没有 where
子句,因此您正在更新所有行。
我想你打算:
UPDATE products
SET dealer_id = (CASE WHEN order_id = 7 THEN '1'
WHEN order_id = 6 THEN '2'
ELSE dealer_id
END)
WHERE order_id IN (6, 7)
RETURNING id ;
您可能对 this explanation 不包含 WHERE
子句时所有行都会受到影响的原因感兴趣。
您正在更新所有行。
- 当 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
我在 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,但 returns 所有行的 ID
我的查询有什么问题?
您可能缺少 where 条件(过滤条件)。当前查询将匹配所有行并尝试根据 case 表达式影响它们。
您没有 where
子句,因此您正在更新所有行。
我想你打算:
UPDATE products
SET dealer_id = (CASE WHEN order_id = 7 THEN '1'
WHEN order_id = 6 THEN '2'
ELSE dealer_id
END)
WHERE order_id IN (6, 7)
RETURNING id ;
您可能对 this explanation 不包含 WHERE
子句时所有行都会受到影响的原因感兴趣。
您正在更新所有行。
- 当 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