*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>
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>
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>
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!