Heim >Datenbank >MySQL-Tutorial >Warum erzeugt meine SQL-Abfrage den Fehler „Mehrteiliger Bezeichner konnte nicht gebunden werden'?
Fehler „Mehrteiliger Bezeichner kann nicht gebunden werden“ wird behoben
Der SQL-Abfragefehler „Der mehrteilige Bezeichner ‚a.maxa‘ kann nicht gebunden werden“ weist auf einen Konflikt beim Mischen impliziter und expliziter Joins hin. Das Folgende ist eine detaillierte Erklärung:
Mischen Sie implizite und explizite Joins
In der bereitgestellten Abfrage werden sowohl implizite Joins (durch Kommas getrennte Tabellen) als auch explizite Joins (Schlüsselwort JOIN) verwendet. Dies ist zwar zulässig, muss jedoch sorgfältig gehandhabt werden, um Bindungsprobleme zu vermeiden.
Verbindungsprioritäten verstehen
Explizite Verbindungen haben Vorrang vor impliziten Verbindungen. Dies bedeutet, dass mit dem Schlüsselwort JOIN angegebene Joins vor impliziten Joins ausgeführt werden.
Ungültige Alias-Referenz
In Ihrer Abfrage versuchen Sie, eine implizite Verknüpfung zwischen den Ergebnissen einer expliziten Verknüpfung zwischen den Tabellen a und b und einer anderen Tabelle dkcd durchzuführen. Aufgrund der Priorität expliziter Verknüpfungen ist Tabelle a jedoch nicht verfügbar, wenn versucht wird, mit der ON-Klausel von dkcd auf a.maxa zu verweisen. Daher kommt die Fehlermeldung.
Abfrage neu schreiben
Um dieses Problem zu beheben, müssen Sie die Abfrage unter Verwendung einer konsistenten Join-Syntax neu schreiben. Eine mögliche Lösung besteht darin, einfach explizite Verknüpfungen zu verwenden:
<code class="language-sql">SELECT DISTINCT a.maxa, b.mahuyen, a.tenxa, b.tenhuyen, ISNULL(dkcd.tong, 0) AS tongdkcd FROM phuongxa AS a INNER JOIN quanhuyen AS b ON LEFT(a.maxa, 2) = b.mahuyen LEFT OUTER JOIN ( SELECT maxa, COUNT(*) AS tong FROM khaosat WHERE CONVERT(datetime, ngaylap, 103) BETWEEN '2011年9月1日' and '2011年9月5日' GROUP BY maxa ) AS dkcd ON dkcd.maxa = a.maxa WHERE a.maxa '99' ORDER BY a.maxa;</code>
In dieser Abfrage sind alle Verknüpfungen explizit und Tabellennamen werden in allen Fällen mithilfe von Aliasen qualifiziert. Dadurch wird sichergestellt, dass der Verweis auf a.maxa in der ON-Klausel von dkcd gültig ist.
Erläuterung zur ORDER BY-Klausel
Wie von @Aaron Bertrand vorgeschlagen, wird empfohlen, maxa mit einem bestimmten Alias a in der ORDER BY-Klausel zu qualifizieren:
<code class="language-sql">ORDER BY a.maxa;</code>
Dadurch wird sichergestellt, dass die Sortierung in der richtigen Spalte durchgeführt wird. Auch das Datumsformat wurde angepasst, um es leichter verständlich zu machen.
Das obige ist der detaillierte Inhalt vonWarum erzeugt meine SQL-Abfrage den Fehler „Mehrteiliger Bezeichner konnte nicht gebunden werden'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!