Postgres:UPDATE一个布尔列,用于将该列中的所有其他布尔值设置为false

Mat*_*att 7 sql postgresql

我想知道我是否可以在一个查询中执行此操作

用例:twitter固定推文.您最多可以拥有一条固定的推文,并设置一条新的固定推文,取消设置所有其他以前固定的推文.

有任何想法吗?

Jak*_*nia 7

UPDATE tweets
SET pinned = NOT pinned
WHERE id = 1234 OR pinned = TRUE;
Run Code Online (Sandbox Code Playgroud)

或者要格外小心

WHERE (id = 1234 AND pinned = FALSE) OR (pinned = TRUE AND id <> 1234)
Run Code Online (Sandbox Code Playgroud)

  • 或者简单地说:`更新tweets set pinned =(id = 1234)` (2认同)
  • @a_horse_with_no_name这是一个好主意.虽然我认为它仍然需要`WHERE id = 1234 OR pinned = TRUE`它使用索引而不是尝试处理所有行. (2认同)