MySQL SYNTAX VOOR JOIN DE UPDATE

Ik heb twee tabellen die er als volgt uitzien

TREIN

+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| TrainID  | varchar(11) | NO   | PRI | NULL    |       |
| Capacity | int(11)     | NO   |     | 50      |       |
+----------+-------------+------+-----+---------+-------+

Reserveringen

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

Momenteel probeer ik een query te maken die de capaciteit op een trein zal verhogen als een reservering is geannuleerd. Ik weet dat ik een join moet uitvoeren, maar ik weet niet zeker hoe ik het moet doen in een update-verklaring. Ik weet bijvoorbeeld hoe ik de capaciteit van een trein moet krijgen met een bepaald reservationID, zoals SO:

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

Maar ik zou graag de query bouwen die dit –

Increment Train.Capacity by ReservationTable.NoSeats given a ReservationID

Indien mogelijk, zou ik graag willen weten hoe hij kan verhogen door een willekeurig aantal zitplaatsen. Als een terzijde, ben ik van plan de reservering te verwijderen nadat ik de verhoging in een Java-transactie heb uitgevoerd. Zal het verwijderen van de transactie?

Bedankt voor de hulp!


Antwoord 1, Autoriteit 100%

MySQL ondersteunt een multi-tabel UPDATESyntaxis , die er ongeveer zo uitziet:

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

U kunt de TrainTABEL en VERWIJDEREN VAN DE ReservationsTABLE IN DEZELFDE TACE IN DEZELFDE TACTIE. Zolang u eerst de update uitvoert en vervolgens de DELETE Ten tweede doet, moet deze werken.


Antwoord 2, Autoriteit 4%

Hier is een ander voorbeeld van een update-instructie die joins bevat om de waarde die wordt bijgewerkt te bepalen. In dit geval wil ik de transacties.payee_id bijwerken met de betalings-ID van Account, als de Payee_ID nul is (is niet toegewezen).

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

Other episodes