Как я могу обновить неправильное поле столбца из других полей с правильным значением в MySQL? - PullRequest
0 голосов
/ 18 апреля 2020

Вот моя проблема: мне поручено исправить некоторые значения в столбце, которые могут быть получены из других таблиц. До сих пор я пытался использовать триггер безрезультатно, так как мне не хватает понимания этой концепции. Кроме того, мой инструктор сказал, что мне даже не нужно использовать триггеры, чтобы решить эту проблему, и я не могу понять, как это возможно. Я только начал изучать SQL за последние 2-3 недели, так что любые советы и рекомендации будут высоко оценены.

Имеется 3 рассматриваемых таблицы:

Транзакции (t_id2, a_id2, f_id2 , class2, T_Date)

Билет (t_id, u_id2, тип, totalCost, P_DateTime)

ClassCost (a_id, f_id, класс, стоимость)

Transactions
----------------------------------------------
t_id2 | a_id2 | f_id2 | class2 |   T_Date
----------------------------------------------
  1     'AB'     2032      1      '2020-03-01'
  1     'ZZ'     3331      2      '2020-03-11' 
  2     'AB'     401       2      '2020-02-21'


Ticket
--------------------------------------------------------
t_id  | u_id2 | type | totalCost |     P_DateTime
--------------------------------------------------------
  1       2      1      999.99     '2020-03-01 01:15:00'
  2       5      2        0.00     '2020-03-11 08:33:51'

ClassCost
-------------------------------------
a_id   |  f_id  | class | totalCost    
-------------------------------------
 'AB'     2032      1        95.00
 'AB'     401       2        45.00
 'BB'     3176      2        50.00
 'ZZ'     3331      1       105.00
 'ZZ'     3331      2        46.00

Я бы хотел бы выдать следующее.

Ticket
--------------------------------------------------------
t_id  | u_id2 | type | totalCost |     P_DateTime
--------------------------------------------------------
  1       2      1      141.00     '2020-03-01 01:15:00'
  2       5      2       45.00     '2020-03-11 08:33:51'

Возможно ли это даже без использования триггера? Я знаю, что мы можем использовать Update для обновления указанного столбца, но основная проблема заключается в использовании Ticket.t_id для получения реальной стоимости от Transactions и использовании Transactions.a_id2 и Transactions.f_id2 для получения ClassCost.cost. Требуется ли здесь соединение?

РЕДАКТИРОВАТЬ: Этот запрос дает результирующую таблицу

select sum(fare)
from (select T.t_id, 
          CC.cost
      from ClassCost as CC, 
          Transactions as S, 
          Ticket as T
      where T.t_id = S.t_id2 
          and F.a_id = S.a_id2 
          and F.f_id = S.f_id2 
          and CC.class = S.class3) as A
group by t_id;

--------------------
t_id  | totalCost    
--------------------
  1       141.00
  2       45.00

Теперь мне просто нужно сохранить столбец totalCost в Ticket.totalCost. Я попытался выполнить обновление с моим подзапросом без T.t_id, чтобы он легко сохранялся в Ticket. Тем не менее, я получаю код ошибки: 1242, подзапрос возвращает более 1 строки. Есть идеи?

...