이렇게 생긴 테이블이 두 개 있어요
기차
+----------+-------------+------+-----+---------+-------+
| 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 문에서 수행하는 방법을 잘 모르겠습니다. 예를 들어 특정 ReservationID를 사용하여 열차의 용량을 얻는 방법을 알고 있습니다.
select Capacity
from Train
Join Reservations on Train.TrainID = Reservations.Train
where ReservationID = "15";
하지만이 작업을 수행하는 쿼리를 구성하고 싶습니다.
Increment Train.Capacity by ReservationTable.NoSeats given a ReservationID
가능하다면 임의의 좌석 수만큼 증가시키는 방법도 알고 싶습니다. 제쳐두고 Java 트랜잭션에서 증분을 수행 한 후 예약을 삭제할 계획입니다. 삭제가 거래에 영향을 줍니까?
도와 주셔서 감사합니다!
답변
MySQL은 다음과 같은 다중 테이블 UPDATE
구문을 지원합니다 .
UPDATE Reservations r JOIN Train t ON (r.Train = t.TrainID)
SET t.Capacity = t.Capacity + r.NoSeats
WHERE r.ReservationID = ?;
Train
테이블을 업데이트 Reservations
하고 동일한 트랜잭션 의 테이블에서 삭제할 수 있습니다 . 먼저 업데이트를 수행 한 다음 두 번째로 삭제하면 작동합니다.
답변
다음은 업데이트되는 값을 확인하기위한 조인을 포함하는 UPDATE 문의 또 다른 예입니다. 이 경우 payee_id가 0 (할당되지 않은 경우) 인 경우 transaction.payee_id를 관련 계정 결제 ID로 업데이트하고 싶습니다.
UPDATE transactions t
JOIN account a ON a.id = t.account_id
JOIN account ap ON ap.id = a.pmt_act_id
SET t.payee_id = a.pmt_act_id
WHERE t.payee_id = 0