Heim > Datenbank > MySQL-Tutorial > Warum erhalte ich in meiner SQL-Abfrage den Fehler „Der mehrteilige Bezeichner konnte nicht gebunden werden' und wie kann ich ihn beheben?

Warum erhalte ich in meiner SQL-Abfrage den Fehler „Der mehrteilige Bezeichner konnte nicht gebunden werden' und wie kann ich ihn beheben?

Mary-Kate Olsen
Freigeben: 2025-01-17 03:42:10
Original
311 Leute haben es durchsucht

Why am I getting the

Fehler und Lösungen bei mehrteiligen SQL-Identifikatoren

Beim Abrufen und Bearbeiten von Datenbankdaten mithilfe von SQL-Abfragen tritt häufig der Fehler „Mehrteiliger Bezeichner kann nicht gebunden werden“ auf, was frustrierend ist. In diesem Artikel werden dieser Fehler und seine Lösungen erläutert, um Ihnen bei der zukünftigen Behebung ähnlicher Probleme zu helfen.

Fehler verstehen

Der Fehler „Mehrteiliger Bezeichner kann nicht gebunden werden“ tritt normalerweise auf, wenn ein mehrteiliger Bezeichner (bestehend aus einem Tabellenalias und einem Spaltennamen) in einer Abfrage verwendet, aber nicht korrekt in Anführungszeichen gesetzt wird. Diese Situation tritt auf, wenn Sie implizite Joins (mit Kommas in der FROM-Klausel) und explizite Joins (mit dem Schlüsselwort JOIN) in derselben Abfrage mischen.

Gemischte Verwendung von Verknüpfungen

Implizite Joins sind weniger explizit als explizite Joins und werden häufig zur Vereinfachung von Abfragen verwendet. Allerdings haben explizite Joins Vorrang vor impliziten Joins. Das heißt, wenn Sie explizite und implizite Joins in einer Abfrage mischen, haben die expliziten Join-Bedingungen Vorrang und überschreiben möglicherweise die impliziten Join-Bedingungen.

Beispielabfrage

Sehen wir uns die Beispielabfrage in der Frage an:

<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>
Nach dem Login kopieren

In dieser Abfrage hat eine explizite Verknüpfung zwischen „b“ und „dkcd“ unter Verwendung der ON-Klausel Vorrang vor einer impliziten Verknüpfung zwischen „a“ und „dkcd“. Dies führt dazu, dass der Verweis auf „a.maxa“ in der ON-Klausel ungültig ist, da „a“ zu diesem Zeitpunkt noch nicht mit „dkcd“ verbunden ist.

Lösung: Schreiben Sie die Abfrage neu

Um diesen Fehler zu beheben, schreiben Sie die Abfrage neu, um explizite Verknüpfungen für alle Tabellenbeziehungen zu verwenden:

<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>
Nach dem Login kopieren

In dieser neu geschriebenen Abfrage wird die Tabelle „a“ mithilfe eines expliziten INNER JOIN mit „b“ verknüpft. Die Ergebnisse dieses Joins werden dann mit „dkcd“ unter Verwendung eines expliziten LEFT OUTER JOIN verknüpft. Dadurch wird sichergestellt, dass der Verweis auf „a.maxa“ in der Join-Bedingung von dkcd gültig ist.

Zusätzliche Hinweise

Es ist erwähnenswert, dass es in der ORDER BY-Klausel besser ist, die Spalte „maxa“ mit einem Tabellenalias zu qualifizieren, da dies Mehrdeutigkeiten und mögliche Fehler verhindert (wenn die Abfrage mehrere Spalten mit demselben Namen enthält). In diesem Beispiel wäre die ORDER BY-Klausel:

<code class="language-sql">ORDER BY a.maxa</code>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWarum erhalte ich in meiner SQL-Abfrage den 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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage