加入Update的MySQL语法

时间:2010-01-22 02:19:15

标签: sql 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语句中执行此操作。例如,我知道如何在给定某个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事务中执行增量后删除保留。删除会影响交易吗?

感谢您的帮助!

2 个答案:

答案 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