如何用来自另一个 table 的数据(计算)填充 SQL 列

How to fill a SQL column with data (calculated) from another table

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

我有两个 table 如下:

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     |

“客户端”中的“引用”table被定义为外键。

是否可以使用自动公式填充 table“游览”中的“计数”列,计算 t_id 在“客户端”中出现的次数 table?

类似于: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

你提到的观点确实是去这里的方法。您需要创建的视图需要连接两个表并进行计数聚合,如下所示:

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

不,你不能。生成的列只能使用来自相同 table.

的数据

您的选择是:

1.使用视图

您可以 select 从计算您想要的额外值的视图。例如:

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 并在每次从 table clients 添加、修改或删除行时使用触发器填充它。