Maison > base de données > tutoriel mysql > Pourquoi ma requête SQL renvoie-t-elle « L'identifiant multi-parties « a.maxa » n'a-t-il pas pu être lié » ?

Pourquoi ma requête SQL renvoie-t-elle « L'identifiant multi-parties « a.maxa » n'a-t-il pas pu être lié » ?

Susan Sarandon
Libérer: 2025-01-17 03:31:08
original
892 Les gens l'ont consulté

Why Does My SQL Query Return

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal