我有两个看起来像这样的表
列车
+----------+-------------+------+-----+---------+-------+
| 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的情况下获得Train的容量,如下所示:
select Capacity
from Train
Join Reservations on Train.TrainID = Reservations.Train
where ReservationID = "15";
但我想构建执行此操作的查询 -
Increment Train.Capacity by ReservationTable.NoSeats given a ReservationID
如果可能的话,我也想知道如何以任意数量的座位增加。另外,我计划在Java事务中执行增量后删除保留。删除会影响交易吗?
感谢您的帮助!
答案 0 :(得分:134)
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
表中删除。只要先执行更新然后再执行删除操作,它就可以正常工作。
答案 1 :(得分:1)
这是UPDATE语句的另一个示例,该语句包含用于确定要更新的值的联接。在这种情况下,如果payee_id为零(未分配),我想用相关的帐户付款ID更新transaction.payee_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