2010-01-22 2 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 문에서 수행하는 방법을 모르겠습니다. 예를 들어, 나는 특정 예약 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

바흐, 실수로'JOIN' 앞에'SET'을 넣었습니다. NB 사람들 – deed02392