SQL-Abfragefehler: „Mehrteilige Kennung kann nicht gebunden werden“
Problembeschreibung
Beim Ausführen einer SQL-Abfrage ist der Fehler aufgetreten: „Der mehrteilige Bezeichner ‚a.maxa‘ kann nicht gebunden werden.“ Auch nach der Aufteilung der Abfrage in separate Unterabfragen besteht der Fehler weiterhin.
Hier ist ein Beispiel für eine fehlgeschlagene Abfrage:
<code class="language-sql">SELECT DISTINCT a.maxa , b.mahuyen , a.tenxa , b.tenhuyen , ISNULL(dkcd.tong, 0) AS tongdkcd FROM phuongxa a , quanhuyen b LEFT OUTER JOIN ( SELECT maxa , COUNT(*) AS tong FROM khaosat WHERE CONVERT(DATETIME, ngaylap, 103) BETWEEN 'Sep 1 2011' AND 'Sep 5 2011' GROUP BY maxa ) AS dkcd ON dkcd.maxa = a.maxa WHERE a.maxa <> '99' AND LEFT(a.maxa, 2) = b.mahuyen ORDER BY maxa;</code>
Fehlergrund
Dieser Fehler wird durch eine falsche Mischung von expliziten und impliziten Joins in der Abfrage verursacht. Explizite Verknüpfungen, ausgedrückt mit dem Schlüsselwort JOIN, haben Vorrang vor impliziten Verknüpfungen (angegeben durch Kommas und eine WHERE-Klausel).
In der angegebenen Abfrage verknüpfen Sie die Tabellen a und b explizit und führen dann implizit eine dkcd zum Ergebnis dieser Verknüpfung mithilfe der LEFT OUTER JOIN-Syntax durch. Dies führt jedoch dazu, dass der Verweis auf a.maxa in der ON-Klausel ungültig ist, da a nicht Teil der expliziten dkcd-Verbindung ist.
Lösung
Um dieses Problem zu beheben, sollten Sie die Abfrage neu schreiben, um eine konsistente Join-Syntax zu verwenden. Eine mögliche Lösung ist:
<code class="language-sql">SELECT DISTINCT a.maxa, b.mahuyen, a.tenxa, b.tenhuyen, ISNULL(dkcd.tong, 0) AS tongdkcd FROM phuongxa a INNER JOIN quanhuyen b ON LEFT(a.maxa, 2) = b.mahuyen LEFT OUTER JOIN ( SELECT maxa, COUNT(*) AS tong FROM khaosat WHERE CONVERT(datetime, ngaylap, 103) BETWEEN 'Sep 1 2011' AND 'Sep 5 2011' GROUP BY maxa ) AS dkcd ON dkcd.maxa = a.maxa WHERE a.maxa <> '99' ORDER BY a.maxa;</code>
In dieser modifizierten Abfrage ist der explizite Join klar definiert und der Verweis auf a.maxa ist in der ON-Bedingung gültig. Wie Aaron Bertrand vorgeschlagen hat, sollten Sie auch den a-Alias in der ORDER BY-Klausel angeben, um mögliche Unklarheiten zu vermeiden.
Das obige ist der detaillierte Inhalt vonWarum führt meine SQL-Abfrage zu dem Fehler „Der mehrteilige Bezeichner konnte nicht gebunden werden' und wie kann ich ihn beheben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!