Ich habe zwei Tabellen, die so aussehen
Zug
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| TrainID | varchar(11) | NO | PRI | NULL | |
| Capacity | int(11) | NO | | 50 | |
+----------+-------------+------+-----+---------+-------+
Reservierungen
+---------------+-------------+------+-----+---------+----------------+
| 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 | |
+---------------+-------------+------+-----+---------+----------------+
Derzeit versuche ich, eine Abfrage zu erstellen, die die Kapazität eines Zuges erhöht, wenn eine Reservierung storniert wird. Ich weiß, dass ich einen Join durchführen muss, bin mir aber nicht sicher, wie ich das in einer Update-Anweisung tun soll. Zum Beispiel weiß ich, wie man die Kapazität eines Zuges mit einer bestimmten Reservierungs-ID erhält, wie folgt:
select Capacity
from Train
Join Reservations on Train.TrainID = Reservations.Train
where ReservationID = "15";
Aber ich möchte die Abfrage erstellen, die dies tut -
Increment Train.Capacity by ReservationTable.NoSeats given a ReservationID
Wenn möglich, möchte ich auch wissen, wie man um eine beliebige Anzahl von Sitzen erhöht. Nebenbei habe ich vor, die Reservierung zu löschen, nachdem ich das Inkrement in einer Java-Transaktion ausgeführt habe. Wird das Löschen die Transaktion beeinflussen?
Danke für die Hilfe!
Antworten:
MySQL unterstützt eine Multi-Table-
UPDATE
Syntax , die ungefähr so aussehen würde:UPDATE Reservations r JOIN Train t ON (r.Train = t.TrainID) SET t.Capacity = t.Capacity + r.NoSeats WHERE r.ReservationID = ?;
Sie können
Train
dieReservations
Tabelle in derselben Transaktion aktualisieren und aus der Tabelle löschen . Solange Sie zuerst das Update und dann das Löschen durchführen, sollte es funktionieren.quelle
SET
vor dasJOIN
gestellt. NB LeuteHier ist ein weiteres Beispiel für eine UPDATE-Anweisung, die Verknüpfungen enthält, um den Wert zu ermitteln, der aktualisiert wird. In diesem Fall möchte ich die transaction.payee_id mit der entsprechenden Konto-Zahlungs-ID aktualisieren, wenn die payee_id Null ist (wurde nicht zugewiesen).
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
quelle