我有一个Circus表如下
| 马戏团标识|马戏团日期|马戏表演价格|
| - -|- -|- -|
| 一个|2020年12月9日|七十八人|
| 2个|2021年1月12日|八十二人|
和票据表,如下所示
| 票证标识|马戏团标识|票证类别|
| - -|- -|- -|
| 一个|一个|成人|
| 2个|一个|学生|
| 三个|一个|子项|
| 四个|2个|成人|
| 五个|2个|子项|
| 六个|2个|成人|
并且我希望通过添加名为ticket_sold的新列来更改circus表,其值应如下所示
| 马戏团标识|马戏团日期|马戏表演价格|已售出门票|
| - -|- -|- -|- -|
| 一个|2020年12月9日|七十八人|三个|
| 2个|2021年1月12日|八十二人|三个|
这是我试过的
alter table circus add ticket_sold numeric(3) default 0;
update circus set ticket_sold = (select count(ticket_id) from ticket group by circus_id);
它给我一个错误说
single-row subquery returns more than one row
2条答案
按热度按时间sczxawaw1#
一般来说,不要这样做,因为这样做会导致
ticket_sold
列很快与ticket
表不同步。如果您想要动态更新数据行,请执行下列动作:
1.使用视图。
您可以在需要时计算该值:
2.使用触发器。
如果必须在
circus
表中保留票证数,则:fiddle
hfwmuf9z2#
Is is not
group by
clause you need because query then returns number of tickets per each circus, but - then you get as many rows as there arecircus_id
s in theticket
table. Instead, correlate subquery to the main table: