2010-01-22 35 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 |    | 
+---------------+-------------+------+-----+---------+----------------+ 

目前兩個表,我試圖創建一個查詢,將遞增如果預訂被取消,列車的通行能力。我知道我必須執行加入,但我不知道如何在Update語句中執行此操作。例如,我知道如何讓一列火車的容量給予一定的預留ID,像這樣:

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

但我想構建一個執行此查詢 -

Increment Train.Capacity by ReservationTable.NoSeats given a ReservationID 

如果可能,我想知道如何增加任意數量的座位。另外,我打算在執行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

Bah,我錯誤地把'SET'放在'JOIN'前面。 NB人 – deed02392 2013-09-30 20:18:44