sql - 为每一行选择随机值

标签 sql postgresql random

我正在尝试从另一个表的列中为我正在更新的表的每一行选择一个新的随机值。我得到了随机值,但是我无法让它为每一行都改变。有任何想法吗?这是代码:

UPDATE srs1.courseedition
SET ta_id = teacherassistant.ta_id
FROM srs1.teacherassistant
WHERE (SELECT ta_id FROM srs1.teacherassistant ORDER BY RANDOM()
       LIMIT 1) = teacherassistant.ta_id

最佳答案

我的猜测是 Postgres 正在优化子查询,因为它不依赖于外部查询。您是否只是考虑过使用子查询?

UPDATE srs1.courseedition
    SET ta_id = (SELECT ta.ta_id
                 FROM srs1.teacherassistant ta
                 ORDER BY RANDOM()
                 LIMIT 1
                );

我不认为这会解决问题(智能优化器,唉)。但是,如果您关联到外部查询,那么它应该每次都运行。也许:

UPDATE srs1.courseedition ce
    SET ta_id = (SELECT ta.ta_id
                 FROM srs1.teacherassistant ta
                 WHERE ce.ta_id IS NULL  -- or something like that
                 ORDER BY RANDOM()
                 LIMIT 1
                );

您可以将 WHERE 子句替换为更无意义的内容,例如 WHERE COALESCE(ca.ta_id, '') IS NOT NULL

关于sql - 为每一行选择随机值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46373479/

相关文章:

sql - SQLPLUS 中的 to_char 函数

postgresql - 限制 RDS PostgreSQL 9.6 中新创建用户的创建表权限

c - 使用指针数组输出通过随机片段配置的句子

sql - 如何防止 SQL 语法中排序规则影响表名?

使用 SELECT ALL 进行二进制较低时不使用 MySQL 索引

mysql - 使用条件 If 语句查询

linux - 在linux上使用dd和/dev/random创建随机文件

postgresql - Postgres : Update table joined with materialized view? 错误: View 无法锁定实体化 View 中的行

database - 在我的情况下,哪种索引方法更好?

c - 关于独特值(value)生成的建议