ホームページ > データベース > mysql チュートリアル > SQL クエリが「マルチパート識別子 'a.maxa' をバインドできませんでした」というメッセージを返すのはなぜですか?

SQL クエリが「マルチパート識別子 'a.maxa' をバインドできませんでした」というメッセージを返すのはなぜですか?

Susan Sarandon
リリース: 2025-01-17 03:31:08
オリジナル
892 人が閲覧しました

Why Does My SQL Query Return

SQL エラー「マルチパート識別子 'a.maxa' をバインドできません」の包括的な分析と解決策

SQL クエリでは、「マルチパート識別子 'a.maxa' をバインドできません」エラーは通常、暗黙的結合と明示的結合の間の競合によって発生します。このエラーを回避するには、これら 2 つの接続タイプの優先順位と動作を理解することが重要です。

暗黙的な結合 (カンマ結合) は、WHERE 句で結合条件を指定します。明示的な結合 (JOIN キーワードを使用) は、暗黙的な結合よりも優先されます。

指定されたクエリでは、phuongxa (a) と quanhuyen (b) の間の暗黙的な結合と、khaosat (dkcd) と b の明示的な結合が問題になります。クエリは a と b を dkcd で結合することを想定していますが、実際には、最初に b と dkcd の間で結合が行われます。これにより、この時点では a がまだ dkcd に結合されていないため、dkcd 結合条件内の a.maxa への参照が無効になります。

このエラーを解決するには、すべての明示的な結合を使用してクエリを書き直すことをお勧めします。例:

<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>
ログイン後にコピー

このクエリは 3 つのテーブルすべてで明示的な結合を使用し、必要な結合順序を保証します。さらに、ORDER BY 句でエイリアス a を使用して maxa を修飾し、ソートの基準となるテーブルのフィールドを明示的に指定しました。

明示的結合と暗黙的結合の動作を理解することは、このようなエラーをトラブルシューティングし、効率的な SQL クエリを作成するために重要です。

以上がSQL クエリが「マルチパート識別子 'a.maxa' をバインドできませんでした」というメッセージを返すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート