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