sql - 如何用另一个表中的随机行更新表中的每一行?
问题描述
我正在做一些测试,需要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
.
解决方案
这是决定只运行一次子查询的过度活跃的优化器的问题。
一种解决方案是向外部查询添加相关子句:
UPDATE Employee
SET DepartmentId = (SELECT d.Id
FROM Department d
WHERE employee.id is not null
ORDER BY RANDOM() LIMIT 1
);
这绕过了优化器。
这是一个 db<>fiddle。
推荐阅读
- javascript - 联系表 7:未路由到新页面
- reactjs - 如何测试在 Jest/Enzyme 组件范围之外定义的无状态组件中使用的函数?
- java - 如何在 onBindViewHolder 中调用 onRewardedVideoAdLoaded
- angular - 在 AmCharts 中,我可以向饼图添加额外的或自定义的数据字段吗?
- asp.net-core - 在 ASP.NET Core 中设置应用程序池名称
- filesystems - 添加文件系统 ISE 逻辑应用连接器时出错
- spring-boot - spring cloud streamrabbitmq消费者动态伸缩
- java - 60000 毫秒后元数据中不存在主题
- bluetooth - Amazon Echo 之类的设备如何连接到网络
- matomo - 在 Matomo 中查询所有网站时出错 [fechada]