J'ai deux tableaux qui ressemblent à ceci
Train
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| TrainID | varchar(11) | NO | PRI | NULL | |
| Capacity | int(11) | NO | | 50 | |
+----------+-------------+------+-----+---------+-------+
Réservations
+---------------+-------------+------+-----+---------+----------------+
| 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 | |
+---------------+-------------+------+-----+---------+----------------+
J'essaie actuellement de créer une requête qui incrémente la capacité d'un train si une réservation est annulée. Je sais que je dois effectuer une jointure, mais je ne sais pas comment le faire dans une instruction de mise à jour. Par exemple, je sais comment obtenir la capacité d'un train avec un certain ReservationID, comme suit :
select Capacity
from Train
Join Reservations on Train.TrainID = Reservations.Train
where ReservationID = "15";
Mais j'aimerais construire la requête qui fait ça -
Increment Train.Capacity by ReservationTable.NoSeats given a ReservationID
Si possible, j'aimerais aussi savoir comment incrémenter par un nombre arbitraire de sièges. Par ailleurs, j'ai l'intention de supprimer la réservation après avoir effectué l'incrémentation dans une transaction Java. La suppression aura-t-elle un effet sur la transaction ?
Merci pour votre aide !
3 votes
Je sais que ce message date d'il y a 9 ans, mais pour quelque chose comme la capacité des trains, vous ne voulez pas mettre à jour une colonne pour cela, sauf si vous avez une très bonne raison. Comme vous l'avez souligné, il s'agit d'une jointure unique. C'est quelque chose qui va se mettre à jour BEAUCOUP - par réservation, donc cela devrait être une requête de sélection à la volée avec jointure, plutôt qu'une mise à jour. Les mises à jour excessives verrouillent les tables.