如何更新表格,因此只有1个数字为1的值

问题描述 投票:0回答:3

假设我有一个表,其中包含user_id,car_id和selected列。一个用户可以拥有多辆汽车,但一次只能选择使用1辆。我可以使用两次不同的数据库调用来更新它们的值,一次将所选汽车更新为1,然后第二次调用将先前选择的汽车更新为0,我将如何在1步中执行此操作?

UPDATE cars SET selected = 0 WHERE user_id = <id> AND selected = 1
UPDATE cars SET selected = 1 WHERE user_id = <id> AND car_id = <car_id>

通常是我现在所拥有的。

sql postgresql
3个回答
1
投票
UPDATE cars 
    SET selected = 1-selected 
    WHERE user_id = <id> 
    AND (selected = 1 OR car_id = <car_id>)

1
投票

您可以使用带有UPDATE表达式的CASE查询来根据selected设置car_id的值。例如,将user_id = 1的选定汽车设置为1:

UPDATE cars
SET selected = CASE WHEN car_id = 1 THEN 1 ELSE 0 END
WHERE user_id = 1

Demo on dbfiddle


0
投票

避免任何不必要的更新,因为仅必须更新两行:

  • car_id = <car_id>必须将selected列设置为1的行
  • 并且具有selected = 1的当前行必须设置为0

UPDATE cars 
SET selected = (car_id = <car_id>)::int
WHERE user_id = <id> AND (car_id = <car_id> OR selected = 1);
© www.soinside.com 2019 - 2024. All rights reserved.