微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何用另一个表中的数据计算填充 SQL 列

如何解决如何用另一个表中的数据计算填充 SQL 列

我有一个问题,但不知道如何准确地解决这个问题。

我有两个表如下:

Clients
| c_id | name    | reference |
| ---- | ------- | --------- |
| 1    | ClientA | 1         |
| 2    | ClientB | 1         |
| 3    | ClientC | 2         |
| 4    | ClientD | 2         |
| 5    | ClientE | 1         |
| 1    | ClientF | 3         |

Tour
| t_id | name    | count |
| ---- | ------- | ----- |
| 1    | TourA   | 3     |
| 2    | TourB   | 2     |
| 3    | TourC   | 1     |

“Client”表中的“Reference”定义为外键。

是否可以使用自动公式填充“Tour”表中的“count”列,以计算 t_id 在“Client”表中出现的次数

类似于:COUNT(c_id) FROM clients WHERE reference = t_id

我已阅读有关创建视图的内容,但不确定如何正确获取数据。

感谢您的帮助, 拉斐尔

更新 #1:

视图中描述的工作流程完美运行。我现在正在尝试通过触发器填充该列,但出现以下代码sql 错误

CREATE TRIGGER client_count 
AFTER UPDATE
ON clients FOR EACH ROW

SELECT t.*,(
        SELECT COUNT(*) FROM clients c where c.tour_id = t.tour_id
    ) AS tours.tour_bookedspace
FROM tours t

解决方法

你提到的view确实是去这里的路。您需要创建的视图需要将两个表连接起来,并进行如下的计数聚合:

CREATE VIEW vwTour
AS
SELECT  t.t_id,t.name,COUNT(t.name) AS Cnt
FROM    tour t
        JOIN Clients c
            ON t.t_id = c.reference
GROUP BY t_id,t.name
,

不,你不能。生成的列只能使用同一张表的数据。

您拥有的选项是:

1.使用视图

您可以从计算您想要的额外值的视图中进行选择。例如:

create view tour_data as
select t.*,(
    select count(*) from clients c where c.reference = t.t_id
  ) as number_of_clients
from your t

2.使用触发器

或者,您可以添加额外的列 number_of_clients,并在每次从表 clients 添加、修改或删除行时使用触发器填充它。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。