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 UPDATE
Syntaxis , 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 Train
TABEL en VERWIJDEREN VAN DE Reservations
TABLE 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