복붙노트

[SQL] 업데이트에 참여하기위한 MySQL의 구문

SQL

업데이트에 참여하기위한 MySQL의 구문

I는 다음과 같이 두 개의 테이블이

기차

+----------+-------------+------+-----+---------+-------+
| 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    |                |
+---------------+-------------+------+-----+---------+----------------+

현재, 나는 예약이 취소되는 경우 기차에 용량을 증가하는 쿼리를 만들려고 해요. 나는 내가 가입 수행 할 필요가 알고 있지만, 나는 확실히 업데이트 문에서 작업을 수행하는 방법에 아니에요. 예를 들어, 나는 특정 예약 ID 주어진과 같이 함께 기차의 용량을 얻을하는 방법을 알고 :

select Capacity 
  from Train 
  Join Reservations on Train.TrainID = Reservations.Train 
 where ReservationID = "15";

그러나 나는이 작업을 수행하는 쿼리를 구성하고 싶습니다 -

Increment Train.Capacity by ReservationTable.NoSeats given a ReservationID

가능하다면, 나는 좌석의 임의의 수에 의해 얼마나 증가에도 알고 싶습니다. 여담으로, 나는 자바 트랜잭션 증가를 수행 한 후 예약을 삭제에 계획입니다. 삭제 효과 트랜잭션을 것인가?

도와 주셔서 감사합니다!

해결법

  1. ==============================

    1.MySQL은 같은 약 보일 것이다 멀티 테이블 UPDATE 구문을 지원합니다 :

    MySQL은 같은 약 보일 것이다 멀티 테이블 UPDATE 구문을 지원합니다 :

    UPDATE Reservations r JOIN Train t ON (r.Train = t.TrainID)
    SET t.Capacity = t.Capacity + r.NoSeats
    WHERE r.ReservationID = ?;
    

    당신은 기차 테이블을 업데이트하고 동일한 트랜잭션에서 예약 테이블에서 삭제할 수 있습니다. 만큼 당신이 먼저 다음 업데이트를 수행 삭제 번째처럼, 그것은 작동합니다.

  2. ==============================

    2.여기에 업데이트되는 값을 결정하는 조인이 포함 된 UPDATE 문의 또 다른 예입니다. payee_id가 0 인 경우이 경우, 나는, 관련 계좌 결제 ID로 transactions.payee_id을 업데이트 할 (할당되지 않았다).

    여기에 업데이트되는 값을 결정하는 조인이 포함 된 UPDATE 문의 또 다른 예입니다. payee_id가 0 인 경우이 경우, 나는, 관련 계좌 결제 ID로 transactions.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
    
  3. from https://stackoverflow.com/questions/2114534/mysql-syntax-for-join-update by cc-by-sa and MIT license