Heim > Datenbank > MySQL-Tutorial > Wie kann „ORA-00918: Spalte mehrdeutig definiert' in SELECT *-Abfragen behoben werden?

Wie kann „ORA-00918: Spalte mehrdeutig definiert' in SELECT *-Abfragen behoben werden?

DDD
Freigeben: 2025-01-13 21:15:47
Original
477 Leute haben es durchsucht

How to Resolve

*Fehlerbehebung „ORA-00918: Spalte mehrdeutig definiert“ in SELECT Abfragen**

Der Fehler „ORA-00918: Spalte mehrdeutig definiert“ tritt häufig auf, wenn SELECT * Abfragen für mehrere verknüpfte Tabellen ausgeführt werden, die Spalten mit identischen Namen enthalten. Die Datenbank-Engine von Oracle kann nicht ermitteln, welche Spalte Sie abrufen möchten, wenn mehrere Tabellen einen Spaltennamen teilen.

Anschauliches Beispiel und Lösung

Bedenken Sie diese SQL-Abfrage:

<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

Diese Abfrage erzeugt den Fehler, weil mehrere Tabellen ( coaches, people, users) eine Spalte mit dem Namen „id“ enthalten.

Um dies zu korrigieren, vermeiden Sie die Verwendung von SELECT *. Geben Sie stattdessen explizit die benötigten Spalten an:

Methode 1: Direkte Spaltenauswahl

Diese Methode wählt die gewünschten Spalten direkt anhand ihrer vollständig qualifizierten Namen (table.column) aus:

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

Methode 2: Verwenden von Spaltenaliasen

Dieser Ansatz weist Spalten mit doppelten Namen eindeutige Aliase zu. Dadurch werden die ausgewählten Spalten eindeutig:

<code class="language-sql">SELECT coaches.id AS coach_id,
       people.name AS person_name,
       users.username AS user_username,
       coaches.title AS coach_title
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 dieser Methoden wird die Mehrdeutigkeit beseitigt und die Abfrage wird erfolgreich ausgeführt. Bevorzugen Sie bei Abfragen mit Verknüpfungen immer die explizite Spaltenauswahl gegenüber SELECT *, um diesen häufigen Fehler zu vermeiden und die Lesbarkeit und Wartbarkeit von Abfragen zu verbessern.

Das obige ist der detaillierte Inhalt vonWie kann „ORA-00918: Spalte mehrdeutig definiert' in SELECT *-Abfragen behoben werden?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage