Синтаксис MySQL для обновления соединения


у меня есть две таблицы, которые выглядят так

Железнодорожный

+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| TrainID  | varchar(11) | NO   | PRI | NULL    |       |
| Capacity | int(11)     | NO   |     | 50      |       |
+----------+-------------+------+-----+---------+-------+

бронирование

+---------------+-------------+------+-----+---------+----------------+
| Field         | Type        | Null | Key | Default | Extra          |
+---------------+-------------+------+-----+---------+----------------+
| ReservationID | int(11)     | NO   | PRI | NULL    | auto_increment |
| FirstName     | varchar(30) | NO   |     | NULL    |                |
| LastName      | varchar(30) | NO   |     | NULL    |                |
| DDate         | date        | NO   |     | NULL    |                |
| NoSeats       | int(2)      | NO   |     | NULL    |                |
| Route         | varchar(11) | NO   |     | NULL    |                |
| Train         | varchar(11) | NO   |     | NULL    |                |
+---------------+-------------+------+-----+---------+----------------+

В настоящее время я пытаюсь создать запрос, который увеличит пропускную способность поезда, если бронирование будет отменено. Я знаю, что мне нужно выполнить соединение, но я не уверен, как это сделать в инструкции Update. Например, я знаю, как получить емкость поезда с заданным определенным ReservationID, например:

select Capacity 
  from Train 
  Join Reservations on Train.TrainID = Reservations.Train 
 where ReservationID = "15";

но я хотел бы построить запрос, который делает это -

Increment Train.Capacity by ReservationTable.NoSeats given a ReservationID

если возможно, я хотел бы знать, как увеличить на произвольное число мест. В стороне, я планирую удалить резервирование после выполнения инкремента в транзакции Java. Повлияет ли удаление на транзакцию?

Спасибо за помощь!

1 63

1 ответ:

MySQL поддерживает a multi-table UPDATE синтаксис, который будет выглядеть примерно так:

UPDATE Reservations r JOIN Train t ON (r.Train = t.TrainID)
SET t.Capacity = t.Capacity + r.NoSeats
WHERE r.ReservationID = ?;

вы можете обновить Train таблица и удалить из Reservations таблица в той же транзакции. Пока вы сначала выполняете обновление, а затем удаляете второе, оно должно работать.