Heim > Fragen und Antworten > Hauptteil
Ich habe zwei Tische, einen Transfertisch und einen Vereinstisch.
Das ist der Tischtransfer:
id | Name | Nachname | Vom Verein | Geh in den Club | Preis | nach Rückennummer | Rücksendenummer |
---|---|---|---|---|---|---|---|
0 | Beispiel 1 | Beispiel 2 | EX3 | EX4 | Beispiel 5 | Beispiel 6 | Beispiel 7 |
Das ist Table Club:
id | Abkürzung | Vollständiger Name |
---|---|---|
0 | EX3 | Beispiel 3 |
1 | EX4 | Beispiel 4 |
Ich möchte eine Zeile aus der Transfertabelle nehmen, den fromclub abrufen, ihn mit der Abkürzung in Clubs abgleichen, den vollständigen Namen aus der Zeile abrufen und ihn der Antwort hinzufügen. Ich möchte dasselbe mit der Toclub-Kolumne machen. Dann möchte ich es für jede zweite Zeile in der Tabellenübertragung wiederholen.
Der Einfachheit halber ist hier mein erwartetes Ergebnis:
id | Name | Nachname | Vom Verein | Geh in den Club | Preis | nach Rückennummer | Rücksendenummer | Aus dem vollständigen Namen des Vereins | vollständiger Name des Clubs |
---|---|---|---|---|---|---|---|---|---|
0 | Beispiel 1 | Beispiel 2 | EX3 | EX4 | Beispiel 5 | Beispiel 6 | Beispiel 7 | Beispiel 3 | Beispiel 4 |
Ich kann anscheinend keine Möglichkeit finden, eine Abfrage zu erstellen, die dies tut, ohne etwa 512 Ergebniszeilen zu erhalten, obwohl ich derzeit nur 8 Ergebniszeilen habe.
SELECT * FROM transfers, (SELECT clubs.fullname FROM transfers, clubs WHERE clubs.abbr = transfers.fromclub) AS fromclubfullname, (SELECT clubs.fullname FROM transfers, clubs WHERE clubs.abbr = transfers.toclub) AS toclubfullname
Es werden 512 Zeilen und zwei Spalten (vollständiger Name genannt) anstelle einer Spalte fromclubfullname und toclubfullname zurückgegeben.
P粉8271215582024-04-03 15:15:27
您可以通过左连接
来做到这一点 -
SELECT transfers.*, c1.fullname as fromclubfullname, c2.fullname as toclubfullname FROM `transfers` LEFT JOIN clubs c1 ON (c1.abbr = transfers.fromclub) LEFT JOIN clubs c2 ON (c2.abbr = transfers.toclub)