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?
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).
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%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
Um es klar zu sagen, die Zeilen 13, 14 und 15 haben die mehrdeutigen Spalten.
Sie müssen die Tabellen in der ORDER BY
-Klausel wie folgt angeben:
Tags und Links sql sqlexception