2010-01-22 5 views
57

У меня есть две таблицы, которые выглядят как этотсинтаксиса 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 |    | 
+---------------+-------------+------+-----+---------+----------------+ 

В настоящее время я пытаюсь создать запрос, который будет увеличивать если поездка отменена. Я знаю, что мне нужно выполнить Join, но я не уверен, как это сделать в инструкции 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 

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

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

ответ

118

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

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

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

+3

Бах, я положил 'SET' перед' JOIN' по ошибке. Люди из NB – deed02392

Смежные вопросы