我有两个看起来像这样的表
培养
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| TrainID | varchar(11) | NO | PRI | NULL | |
| Capacity | int(11) | NO | | 50 | |
+----------+-------------+------+-----+---------+-------+
Run Code Online (Sandbox Code Playgroud)
预订
+---------------+-------------+------+-----+---------+----------------+
| 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 | |
+---------------+-------------+------+-----+---------+----------------+
Run Code Online (Sandbox Code Playgroud)
目前,我正在尝试创建一个查询,如果取消预订,将增加列车上的容量.我知道我必须执行Join,但我不确定如何在Update语句中执行此操作.例如,我知道如何在给定某个ReservationID的情况下获得Train的容量,如下所示:
select Capacity
from Train
Join Reservations on Train.TrainID = Reservations.Train
where ReservationID = "15";
Run Code Online (Sandbox Code Playgroud)
但我想构建执行此操作的查询 -
Increment Train.Capacity by ReservationTable.NoSeats given a ReservationID
Run Code Online (Sandbox Code Playgroud)
如果可能的话,我也想知道如何以任意数量的座位增加.另外,我计划在Java事务中执行增量后删除保留.删除会影响交易吗?
谢谢您的帮助!
Bil*_*win 148
MySQL支持多表UPDATE
语法,看起来大致如下:
UPDATE Reservations r JOIN Train t ON (r.Train = t.TrainID)
SET t.Capacity = t.Capacity + r.NoSeats
WHERE r.ReservationID = ?;
Run Code Online (Sandbox Code Playgroud)
您可以更新Train
表并从Reservations
同一事务中的表中删除.只要先执行更新然后再执行删除操作,它就可以正常工作.
小智 5
这是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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
68233 次 |
最近记录: |