如何解决如何用另一个表中的数据计算填充 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 举报,一经查实,本站将立刻删除。