ORA-00918: Spalte mehrdeutig in SELECT * definiert
Erste ORA-00918: Spalte mehrdeutig definiert: das ausführen dieser SQL:
SELECT *
FROM
(SELECT DISTINCT(coaches.id),
people.*,
users.*,
coaches.*
FROM "COACHES"
INNER JOIN people ON people.id = coaches.person_id
INNER JOIN users ON coaches.person_id = users.person_id
LEFT OUTER JOIN organizations_users ON organizations_users.user_id = users.id
) WHERE rownum <= 25
Irgendwelche Vorschläge, bitte?
InformationsquelleAutor der Frage user43685 | 2011-06-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einer Abfrage Projektion kann nur eine Instanz mit einem bestimmten Namen. Als Sie Ihre WHERE-Klausel zeigt, haben Sie mehrere Tabellen mit einer Spalte namens "ID". Weil Sie die Auswahl
*
Ihre Projektion werden mehrere Spalten namens ID. Oder es hätte, gäbe es nicht den compiler hurling ORA-00918.Die Lösung ist ganz einfach: Sie haben zu erweitern die Projektion explizit wählen Sie benannte Spalten. Dann können Sie entweder lassen sich die doppelten Spalten, die Bindung einfach (sagen) TRAINER.ID oder verwenden Sie spaltenaliasnamen:
coaches.id as COACHES_ID
.Vielleicht fällt dir da eine Menge Tipparbeit, aber es ist der einzige Weg. Wenn es jeder Komfort
SELECT *
gilt als schlechte Praxis in der Produktion-code: explizit benannte Spalten sind viel sicherer.InformationsquelleAutor der Antwort APC
Haben Sie mehrere Spalten den gleichen Namen, was in Ihrem inneren Abfrage, so wird der Fehler ausgelöst, in der äußeren Abfrage. Wenn Sie loswerden der äußeren Abfrage, es sollte laufen, zwar immer noch verwirrend:
Wäre es viel besser (für die Lesbarkeit und die performance von beiden) genau festlegen, welche Felder Sie benötigen, aus jeder der Tabellen nicht auswählen, sondern Sie alle sowieso. Dann, wenn Sie wirklich brauchen zwei Felder genannt, die gleiche Sache aus verschiedenen Tabellen enthält, verwenden Sie spaltenaliasnamen zwischen Ihnen zu unterscheiden.
InformationsquelleAutor der Antwort Craig
Sie können auch sehen, diesen Fehler bei der Auswahl für eine union, wo die entsprechenden Spalten null sein kann.
Dieser scheinbar verwirrt den parser, eine Lösung ist die Zuordnung eine Spalte alias, die immer null-Spalte.
Den alias muss nicht die gleiche sein, wie die entsprechende Spalte, sondern die überschrift der Spalte in der das Ergebnis ist getrieben durch die erste Abfrage unter den Mitgliedern der union, so ist es wahrscheinlich eine gute Praxis.
InformationsquelleAutor der Antwort C Payne