Heim > Datenbank > MySQL-Tutorial > Warum führt meine SELECT *-Abfrage zu einem ORA-00918: Fehler bei der mehrdeutigen Spaltendefinition?

Warum führt meine SELECT *-Abfrage zu einem ORA-00918: Fehler bei der mehrdeutigen Spaltendefinition?

Linda Hamilton
Freigeben: 2025-01-13 21:50:49
Original
346 Leute haben es durchsucht

Why Does My SELECT * Query Result in an ORA-00918: Ambiguous Column Definition Error?

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>
Nach dem Login kopieren
Es liegt ein Problem mit der

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage