首页 > 解决方案 > 使用字符串列表中的随机元素更新 postgresql 列

问题描述

我想使用此列表中的字符串 ['republican', 'democrat'] 随机更新名为 table_name 的表中每一行的 registered_pa​​rty 列。我遇到了语法错误。如何修复查询以实现目标。

 Update table_name set registered_party =
  select from (unnest(ARRAY['republican','democrat'])
   FROM generate_series(1, 10)
  ORDER BY random() )
  LIMIT 10;

标签: postgresqlrandomsql-update

解决方案


警告:这不会在未嵌套块中使用您的列表,因此如果您需要的值超过这些值,它将无法按原样工作。

SELECT CASE WHEN random() > 0.5 THEN 'republican' ELSE 'democrat' END AS party
FROM generate_series(1, 10) AS g(i)

输出如下内容:

 party
------------
 democrat
 republican
 republican
 democrat
 democrat
 democrat
 republican
 republican
 democrat
 republican

您的最终更新声明将如下所示。

UPDATE table_name
SET registered_party = (
  SELECT CASE WHEN random() > 0.5 THEN 'republican' ELSE 'democrat' END
  WHERE table_name.id = table_name.id
); 

您需要WHERE子选择上的子句。否则它将选择“民主”或“共和党”,然后将表中的每个条目都设置为该一方。您希望每一行都是非此即彼的。


推荐阅读