У меня есть два стола, которые похожи на это
Поезд
+----------+-------------+------+-----+---------+-------+
| 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 | |
+---------------+-------------+------+-----+---------+----------------+
В настоящее время я пытаюсь создать вопрос, который увеличит способность на Поезде, если резервирование будет отменено. Я знаю, что должен выполнить Соединение, но я не уверен, как сделать это в заявлении Обновления. Например, я знаю, как получить способность Поезда с, учитывая определенный ReservationID, как так:
select Capacity
from Train
Join Reservations on Train.TrainID = Reservations.Train
where ReservationID = "15";
Но я хотел бы построить вопрос, который делает это -
Increment Train.Capacity by ReservationTable.NoSeats given a ReservationID
Если возможно, я хотел бы знать также, как Увеличить произвольным числом мест. Как в стороне, я - планирование удаления резервирования после того, как я выполню приращение в Явской сделке. Будет удалить эффект сделка?
Спасибо за помощь!
MySQL поддерживает Multi-Table Syntax
Синтаксис , который будет выглядеть примерно так:
UPDATE Reservations r JOIN Train t ON (r.Train = t.TrainID)
SET t.Capacity = t.Capacity + r.NoSeats
WHERE r.ReservationID = ?;
Вы можете обновить таблицу
таблицу и удалить из Бронирование
Таблица в той же транзакции. Пока вы сначала выполняете обновление, а затем сделайте «Удалить секунду», она должна работать.