Heim > Datenbank > MySQL-Tutorial > Wie behebt man Oracles ORA-00918: Mehrdeutiger Spaltendefinitionsfehler in SELECT *-Abfragen?

Wie behebt man Oracles ORA-00918: Mehrdeutiger Spaltendefinitionsfehler in SELECT *-Abfragen?

Mary-Kate Olsen
Freigeben: 2025-01-13 21:26:47
Original
157 Leute haben es durchsucht

How to Resolve Oracle's ORA-00918: Ambiguous Column Definition Error in SELECT * Queries?

*Oracle ORA-00918: Mehrdeutige Spaltendefinition – Ein SELECT -Abfrageproblem**

Das Ausführen einer SELECT *-Abfrage für mehrere verbundene Tabellen in Oracle kann zum gefürchteten ORA-00918-Fehler führen: „mehrdeutige Spaltendefinition“. Dies geschieht, wenn Ihre Abfrage Spalten mit identischen Namen aus verschiedenen Tabellen enthält. Oracle kann nicht ermitteln, welche Spalte Sie abrufen möchten.

Hier ist eine Beispielabfrage, die häufig diesen Fehler auslöst:

<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

Die Wurzel des Problems

Das SELECT * versucht, alle Spalten abzurufen, aber da id in mehreren Tabellen (coaches, people, users) vorhanden ist, ist Oracle unsicher, welche id-Spalte ausgewählt werden soll.

Die Lösung: Präzise Spaltenspezifikation

Um ORA-00918 zu beheben, vermeiden Sie SELECT *. Listen Sie stattdessen explizit die benötigten Spalten auf. Es gibt zwei Hauptwege, dies zu erreichen:

1. Direkte Spaltenauswahl

Geben Sie jede Spalte mit ihrem vollständig qualifizierten Namen (table.column) an:

<code class="language-sql">SELECT coaches.id,
       people.name,
       users.username,
       coaches.team
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

2. Verwendung von Spaltenaliasen

Weisen Sie Spalten mit demselben Namen eindeutige Aliase zu, indem Sie das Schlüsselwort AS verwenden:

<code class="language-sql">SELECT coaches.id AS coaches_id,
       people.name AS person_name,
       users.username AS user_username,
       coaches.team AS coaches_team
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

Durch die Verwendung einer der beiden Methoden stellen Sie Oracle eindeutige Anweisungen zur Verfügung, beheben den ORA-00918-Fehler und stellen sicher, dass Ihre Abfrage erfolgreich ausgeführt wird. Denken Sie daran, die Beispielspaltennamen durch Ihre tatsächlichen Spaltennamen zu ersetzen.

Das obige ist der detaillierte Inhalt vonWie behebt man Oracles ORA-00918: Mehrdeutiger Spaltendefinitionsfehler in SELECT *-Abfragen?. 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