加入Update的MySQL语法

lar*_*dge 74 mysql sql

我有两个看起来像这样的表

培养

+----------+-------------+------+-----+---------+-------+
| 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同一事务中的表中删除.只要先执行更新然后再执行删除操作,它就可以正常工作.

  • 呸,我错误地把`SET`放在`JOIN`之前.NB伙计们 (3认同)

小智 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)