首页 > 解决方案 > 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));

但是,当我尝试此操作时,出现“单行子查询返回多行”错误。

有没有更直接的方法来解决这个问题?

提前致谢!

标签: sqloraclesql-update

解决方案


您可以在此处使用相关子查询进行更新:

UPDATE guest g
SET guest_nobookings = (SELECT COUNT(*) FROM hotel_booking hb
                        WHERE hb.guest_no = g.hotel_bookingno);

您可能需要稍微更改上述内容以使其正常工作。作为旁注,您可能需要重新考虑您的设计,甚至避免进行此更新。原因是每次hotel_booking表中的状态发生变化时,计数聚合可能会变得无效,并且必须重新计算。一般来说,我们尽量避免在 SQL 中存储原始数据的聚合。


推荐阅读