2010-01-22 42 views
57

Tôi có hai bảng trông giống nhưMySQL cú pháp cho Tham Cập nhật

Train này

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

Đặt

+---------------+-------------+------+-----+---------+----------------+ 
| 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 |    | 
+---------------+-------------+------+-----+---------+----------------+ 

Hiện nay, tôi đang cố gắng để tạo ra một truy vấn mà sẽ tăng khi sức chứa trên tàu nếu hủy đặt chỗ. Tôi biết tôi phải thực hiện một Tham gia, nhưng tôi không chắc chắn làm thế nào để làm điều đó trong một tuyên bố Cập nhật. Ví dụ, tôi biết làm thế nào để có được những khả năng của một tàu với cung cấp một ReservationId nhất định, như vậy:

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

Nhưng tôi muốn xây dựng các truy vấn mà thực hiện điều này -

Increment Train.Capacity by ReservationTable.NoSeats given a ReservationID 

Nếu có thể, tôi cũng muốn biết cách tăng thêm số lượng ghế tùy ý. Ngoài ra, tôi đang lên kế hoạch xóa đặt chỗ sau khi tôi thực hiện số gia tăng trong giao dịch Java. Tác vụ xóa có thực hiện giao dịch không?

Cảm ơn sự giúp đỡ!

Trả lời

118

MySQL hỗ trợ một multi-table UPDATE syntax, mà sẽ trông xấp xỉ như thế này:

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

Bạn có thể cập nhật bảng Train và xóa từ bảng Reservations trong cùng một giao dịch. Miễn là bạn thực hiện cập nhật trước và sau đó thực hiện việc xóa thứ hai, nó sẽ hoạt động.

+3

Bah, tôi đặt 'SET' trước' JOIN' do nhầm lẫn. NB folks – deed02392

Các vấn đề liên quan