sql - SQL:根据另一个表的计数结果更新一个表中的列
问题描述
我有一张叫做 的桌子GUEST
和一张叫做 的桌子HOTEL_BOOKING
。
我想更新GUEST
表中名为guest_nobookings
(这是客人在酒店进行的预订数量)的列。
我可以HOTEL_BOOKING
通过根据客人编号对酒店预订编号进行计数,从表中获取客人的预订数量。
这是我到目前为止所拥有的:
SELECT COUNT(hotel_bookingno)
FROM hotel_booking
GROUP BY guest_no;
这给了我每个入住酒店的客人的预订数量。要更新 GUEST 表,我试过这个:
UPDATE guest
SET (guest_nobookings = (SELECT COUNT(hotel_bookingno)
FROM hotel_booking
GROUP BY guest_no));
但是,当我尝试此操作时,出现“单行子查询返回多行”错误。
有没有更直接的方法来解决这个问题?
提前致谢!
解决方案
您可以在此处使用相关子查询进行更新:
UPDATE guest g
SET guest_nobookings = (SELECT COUNT(*) FROM hotel_booking hb
WHERE hb.guest_no = g.hotel_bookingno);
您可能需要稍微更改上述内容以使其正常工作。作为旁注,您可能需要重新考虑您的设计,甚至避免进行此更新。原因是每次hotel_booking
表中的状态发生变化时,计数聚合可能会变得无效,并且必须重新计算。一般来说,我们尽量避免在 SQL 中存储原始数据的聚合。
推荐阅读
- java - JButton 的位置与其 JPanel 不同
- .net - .Net 核心服务写入错误的事件日志
- php - How to POST data using AJAX from one form when there are multiple forms on the same page?
- laravel - 我在用户和角色之间有关系,但我不断收到这个错误 undefined index role
- python - Django:如何在查询集中获取大小数据
- laravel - Laravel 与所有视图共享数据,那么我们如何在我们所有的 vue 组件中管理这个键?
- database - 从小部件内返回未来的函数获取值
- azure - 将所有 AKS 微服务通过管道传输到单个 Application Insights 中,并能够按微服务名称进行筛选
- java - 自定义类的 ArrayList 未正确保存到文件中?
- postgresql - Postgres:你还在用 SSD 分离数据和索引吗