如何用来自另一个 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
添加、修改或删除行时使用触发器填充它。
我有一个问题,但不知道如何准确地解决这个问题。
我有两个 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
添加、修改或删除行时使用触发器填充它。