Heim > Datenbank > MySQL-Tutorial > Warum führt meine SQL-Abfrage zu dem Fehler „Der mehrteilige Bezeichner konnte nicht gebunden werden' und wie kann ich ihn beheben?

Warum führt meine SQL-Abfrage zu dem Fehler „Der mehrteilige Bezeichner konnte nicht gebunden werden' und wie kann ich ihn beheben?

Mary-Kate Olsen
Freigeben: 2025-01-17 03:37:08
Original
359 Leute haben es durchsucht

Why Does My SQL Query Result in a

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

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

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!

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