MySQL Триггер: обновить запись в одной таблице, где запись в той же строке соответствует запросу выбора - PullRequest
0 голосов
/ 02 мая 2020

плохо знакомы с MySQL и базами данных и нуждаются в некоторой помощи. У меня есть таблицы:

назначение

  • назначение_идентификатора ПК, <- </li>
  • имя_пункта int,
  • doctor_id int , <- </li>
  • meeting_time DateTime.

очередь

  • meeting_id int PK, <- </li>
  • фактическое время DateTime.

queue_summary

  • date datetime,
  • doctor_id int PK, <- </li>
  • num_of_patients int , <- </li>

Мне нужно написать триггер, который обновит num_of_patients, добавив +1 к записи в строке, которую doctor_id в queue_summary перекрывается, с новой строкой, вставленной в queue, что соответствует назначению (для извлечения doctor_id).

отл. в случае вставки в queue:

insertion to queue table

статус таблицы встреч:

enter image description here

необходимо обновить:

updating record

Я написал следующий запрос select для извлечения doctor_id, на который повлияла вставка / удаление в очередь:

 select appointment.doctor_id
            from appointment as a 
            join queue as q 
            on a.appointment_id = q.appointment_id
            where new.appointment_id = a.appointment_id;

, и я попытался записать триггер как затем:

delimiter // 

CREATE TRIGGER tr_insert 
    BEFORE INSERT ON queue
    FOR EACH ROW
        BEGIN

          set queue_summary.num_of_patients = queue_summary.num_of_patients+1
          where queue_summary.doctor_id = (
          select appointment.doctor_id
            from appointment as a 
            join queue as q 
            on a.appointment_id = q.appointment_id
            where new.appointment_id = a.appointment_id
        )
       END;//
 delimiter ;

Но не повезло ... Я знаю, что у меня есть какая-то синтаксическая ошибка в части where, но я не могу заставить ее работать ... Пожалуйста, посоветуйте, заранее спасибо!

1 Ответ

0 голосов
/ 02 мая 2020

Команда SET внутри триггеров может использоваться только для NEW var, которая указывает на строку, которая обрабатывается. Чтобы обновить другую таблицу, вам нужно выполнить обычную команду UPDATE:

delimiter // 

CREATE TRIGGER tr_insert 
    BEFORE INSERT ON queue
    FOR EACH ROW
        BEGIN

          update queue_summary
          set queue_summary.num_of_patients = queue_summary.num_of_patients+1
          where queue_summary.doctor_id = (
          select appointment.doctor_id
            from appointment as a 
            join queue as q 
            on a.appointment_id = q.appointment_id
            where new.appointment_id = a.appointment_id
        )
       END;//
 delimiter ;

Вот причина, по которой синтаксическая ошибка применяется к переменной where, потому что mysql команда set не ожидает ее там, SET принимает только var имя и значение.

...