У меня есть вопрос, но я не знаю, как подойти к проблеме.

У меня есть две таблицы:

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     |

«Ссылка» в таблице «Клиент» определяется как внешний ключ.

Можно ли заполнить столбец «count» в таблице «Tour» автоматизированной формулой, в которой подсчитывается, сколько раз 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
2
Raphael 20 Янв 2021 в 01:08

2 ответа

Лучший ответ

Точка зрения, о которой вы говорили, действительно подходит для этого. Представление, которое вам нужно создать, должно объединить две таблицы и выполнить агрегирование счетчиков следующим образом:

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
SEarle1986 19 Янв 2021 в 22:19

Нет, не можешь. Созданные столбцы могут использовать данные только из одной таблицы.

У вас есть следующие варианты:

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.

0
The Impaler 19 Янв 2021 в 23:13