Синтаксис 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    |                |
+---------------+-------------+------+-----+---------+----------------+

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

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

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

Increment Train.Capacity by ReservationTable.NoSeats given a ReservationID

Если возможно, я хотел бы знать также, как Увеличить произвольным числом мест. Как в стороне, я - планирование удаления резервирования после того, как я выполню приращение в Явской сделке. Будет удалить эффект сделка?

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

74
задан OMG Ponies 22 January 2010 в 02:30
поделиться

1 ответ

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 = ?;

Вы можете обновить таблицу таблицу и удалить из Бронирование Таблица в той же транзакции. Пока вы сначала выполняете обновление, а затем сделайте «Удалить секунду», она должна работать.

148
ответ дан 24 November 2019 в 11:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: