首页 > 解决方案 > 如何用另一个表中的随机行更新表中的每一行?

问题描述

我正在做一些测试,需要Employee.DepartmentId用表格中的Id列填充Department

当我这样做时,Employee表中的所有行都具有相同的DepartmentId值。但是我想要不同的DepartmentId值,如果有一些重复也没关系。

UPDATE Employee SET DepartmentId = (SELECT Id FROM Department ORDER BY RANDOM() LIMIT 1);

我怎样才能做到这一点?

添加更多细节

如何编写 SQL 查询,以便对于 中的每一行Employee,引擎从表中获取随机行Department,而不是从表中获取一个随机行Department并将其用于Employee.

标签: sqlsqlite

解决方案


这是决定只运行一次子查询的过度活跃的优化器的问题。

一种解决方案是向外部查询添加相关子句:

UPDATE Employee
    SET DepartmentId = (SELECT d.Id
                        FROM Department d
                        WHERE employee.id is not null
                        ORDER BY RANDOM() LIMIT 1
                       );

这绕过了优化器。

是一个 db<>fiddle。


推荐阅读