Behebung von Oracle ORA-00918: Fehler bei der mehrdeutigen Spaltendefinition
Es ist frustrierend, bei Verwendung der SELECT *
-Anweisung auf den Fehler ORA-00918 zu stoßen. Dieser Fehler tritt auf, wenn eine Spalte mit demselben Namen mehrmals im Ergebnissatz vorkommt und Oracle nicht bestimmen kann, welche Spalte abgerufen werden soll.
Die folgende SQL-Anweisung:
<code class="language-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</code>
SELECT *
-Klausel vor, da in der Unterabfrage mehrere Spalten mit dem Namen „ID“ vorhanden sind:
COACHES.ID
PEOPLE.ID
USERS.ID
Um diese Mehrdeutigkeit zu beseitigen, muss die Abfrage explizit benannte Spalten auswählen. Es wird empfohlen, Spaltenaliase zu verwenden, um die Übersichtlichkeit zu verbessern und Probleme beim zukünftigen Hinzufügen oder Umbenennen von Spalten zu vermeiden. Zum Beispiel:
<code class="language-sql">SELECT COALESCE(COACHES.ID, PEOPLE.ID, USERS.ID) AS ID, people.*, users.*, coaches.*, organizations_users.* 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</code>
Diese Anpassung stellt sicher, dass es nur eine Instanz der ID-Spalte im Ergebnissatz gibt, wodurch der ORA-00918-Fehler behoben und die Datenintegrität sichergestellt wird. COALESCE
Die Funktion wird verwendet, um die Situation zu behandeln, in der möglicherweise NULL-Werte vorhanden sind, und um den ersten Nicht-NULL-ID-Wert auszuwählen. Eine bessere Lösung besteht jedoch darin, alle erforderlichen Spalten explizit anzugeben und die Verwendung des Platzhalterzeichens *
zu vermeiden.
Das obige ist der detaillierte Inhalt vonWarum führt meine SELECT *-Abfrage zu einem ORA-00918: Fehler bei der mehrdeutigen Spaltendefinition?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!