Analyse complète et solution de l'erreur SQL « L'identifiant multipart 'a.maxa' ne peut pas être lié »
Dans les requêtes SQL, l'erreur « l'identifiant multipart 'a.maxa' ne peut pas être lié » provient généralement d'un conflit entre les jointures implicites et explicites. Pour éviter cette erreur, il est crucial de comprendre les priorités et le comportement de ces deux types de connexions.
Jointure implicite (jointure par virgule) spécifie la condition de jointure dans la clause WHERE. Les jointures explicites (à l'aide du mot-clé JOIN) ont priorité sur les jointures implicites.
Dans la requête donnée, le problème est la jointure implicite entre phuongxa
(a) et quanhuyen
(b), tout en joignant explicitement khaosat
(dkcd) avec b. La requête s'attend à joindre a et b avec dkcd, mais en fait, la jointure se produit d'abord entre b et dkcd. Cela rend la référence à a.maxa
dans la condition de jointure dkcd invalide car a n'est pas encore joint à dkcd à ce stade.
Pour résoudre cette erreur, il est recommandé de réécrire la requête en utilisant toutes les jointures explicites. Par exemple :
<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>
Cette requête utilise des jointures explicites sur les trois tables, garantissant l'ordre de jointure requis. De plus, nous avons qualifié ORDER BY
avec l'alias a dans la clause maxa
, spécifiant explicitement le champ dans lequel la table doit être basée sur le tri.
Comprendre le comportement des jointures explicites et implicites est crucial pour résoudre de telles erreurs et écrire des requêtes SQL efficaces.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!