Mehrdeutiger Spaltennamenfehler

8

Beim Ausführen der folgenden (vollständigen) SQL-Abfrage auf Microsoft SQL Server 2000:

%Vor%

Ich bekomme die folgende Ausnahme:

%Vor%

Was mache ich hier falsch und wie kann ich es korrigieren?

    
Paul Reiners 25.11.2008, 16:49
quelle

5 Antworten

24

Weil ARTIFACTTYPE sich auf A.ARTIFACTTYPE oder B.ARTIFACTTYPE beziehen kann und der Server wissen muss, welchen Sie wollen, ändern Sie ihn einfach in A.ARTIFACTTYPE und Sie sollten in diesem Fall in Ordnung sein.

Um dies zu verdeutlichen, müssen Sie das Alias-Präfix jedes Mal angeben, wenn der Spaltenname mehrdeutig ist. Es ist keine schlechte Übung, immer Alias-Präfixe zu verwenden, da es deutlich macht, welche Spalten aus welchen Tabellen stammen, wenn Sie die Abfrage lesen, und Probleme wie diese beseitigt.

Man könnte sich fragen, warum man zwischen zwei Spalten unterscheiden muss, wenn beide auf dieselbe Spalte in derselben Tabelle verweisen. Die Antwort besteht darin, dass die Werte von A.column und B.column abhängig von den Join-Kriterien unterschiedlich sein können, wenn Sie eine Tabelle mit sich selbst verknüpfen (z. B. bei einem äußeren Join, bei dem Werte in einer der Spalten vorkommen können) null).

    
Robert Gamble 25.11.2008, 16:54
quelle
2

Wenn das die genaue Abfrage ist, die Sie ausführen, habe ich keine Ahnung, warum es etwas mehrdeutiges finden würde.

Ich habe geschrieben, was ich denke, ist eine äquivalente Abfrage und lief es in meiner Datenbank (Oracle) ohne Problem.

BEARBEITEN Hinzufügen der genauen Ausgabe eines neuen Experiments in Oracle. Die Abfrage, die in diesem Experiment ausgeführt wird, ist die exakte Abfrage, die vom OP gegeben wird, wobei der Tabellenname ausgefüllt ist. KEINE ANDEREN ÄNDERUNGEN . In dieser Abfrage gibt es nichts Unklares. Entweder ist das nicht die genaue Abfrage, die ausgeführt wird, oder SQL Server hat einen Parser-Fehler.

%Vor%

Bearbeiten beenden

Mein Vorschlag, den Fehler zu umgehen, besteht darin, der Tabelle in jeder select-Klausel einen eindeutigen Alias ​​zu geben und alle Spaltenreferenzen zu qualifizieren. So:

%Vor%     
Dave Costa 25.11.2008 17:54
quelle
1

Listen Sie die vollständige Abfrage auf? Vielleicht haben Sie auch ORDER BY-Klausel - das könnte das Problem verursachen

Ich würde Dave darauf unterstützen, dass es kein Problem mit dem Posted geben sollte Abfrage

    
kristof 25.11.2008 18:14
quelle
0

Um es klar zu sagen, die Zeilen 13, 14 und 15 haben die mehrdeutigen Spalten.

    
Logicalmind 25.11.2008 17:42
quelle
0

Sie müssen die Tabellen in der ORDER BY -Klausel wie folgt angeben:

%Vor%     
Paul Reiners 09.01.2009 18:36
quelle

Tags und Links