postgresql - 使用字符串列表中的随机元素更新 postgresql 列
问题描述
我想使用此列表中的字符串 ['republican', 'democrat'] 随机更新名为 table_name 的表中每一行的 registered_party 列。我遇到了语法错误。如何修复查询以实现目标。
Update table_name set registered_party =
select from (unnest(ARRAY['republican','democrat'])
FROM generate_series(1, 10)
ORDER BY random() )
LIMIT 10;
解决方案
警告:这不会在未嵌套块中使用您的列表,因此如果您需要的值超过这些值,它将无法按原样工作。
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
子选择上的子句。否则它将选择“民主”或“共和党”,然后将表中的每个条目都设置为该一方。您希望每一行都是非此即彼的。
推荐阅读
- javascript - Jquery stopPropagation 不工作,两种情况
- ruby-on-rails - 查找具有关系记录的记录失败:PG::UndefinedTable: ERROR: missing FROM-clause entry for table
- python - 在 python 中使用 FacePlusPlus API
- unity3d - 启动平移或旋转的函数
- node.js - 无法为 NodeJS 安装 JDBC
- c++ - std::condition_variable::notify_one 是可重入的吗?
- angular - 如何只为最终用户制作项目文档?
- python - Python 2.7 - CV2,Rasterio 收到错误 numpy.ndarray 对象不可调用
- docker - 在 VM 上未检测到活动,正在中止(Win10 VM 中的 Docker)
- primefaces - Primefaces documentViewer with Conversation scoped CDI Bean