我在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
我希望获得更新后的行的ID,例如[3,4,5],但它会返回所有行的ID
我的查询出了什么问题?
答案 0 :(得分:4)
您正在更新所有行。
我会在没有更多信息的情况下做出任何建议,但这可能更接近您想要的。
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
答案 1 :(得分:1)
您没有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
子句时所有行都会受到影响。
答案 2 :(得分:0)
您可能缺少条件(过滤条件)。当前查询将匹配所有行,并尝试根据大小写表达式影响它们。