ホームページ > データベース > mysql チュートリアル > SQL クエリで「マルチパート識別子をバインドできませんでした」エラーが発生するのはなぜですか?

SQL クエリで「マルチパート識別子をバインドできませんでした」エラーが発生するのはなぜですか?

Susan Sarandon
リリース: 2025-01-17 03:46:11
オリジナル
706 人が閲覧しました

Why Does My SQL Query Produce a

「マルチパート識別子をバインドできません」エラーを解決します

SQL クエリ エラー「マルチパート識別子 'a.maxa' をバインドできません」は、暗黙的結合と明示的結合を混在させる場合の競合を示します。以下に詳細な説明を示します:

暗黙的結合と明示的結合を混合する

提供されたクエリでは、暗黙的結合 (カンマ区切りテーブル) と明示的結合 (JOIN キーワード) の両方が使用されます。これは許可されていますが、拘束力の問題を避けるために慎重に扱う必要があります。

接続の優先順位を理解する

明示的な接続は暗黙的な接続よりも優先されます。これは、JOIN キーワードを使用して指定された結合が暗黙的な結合の前に実行されることを意味します。

無効なエイリアス参照

クエリでは、テーブル a と b の間の明示的な結合の結果と、別のテーブル dkcd の間で暗黙的な結合を実行しようとしています。ただし、明示的結合の優先順位により、dkcd の ON 句を使用して a.maxa を参照しようとすると、テーブル a は使用できません。ここからエラーメッセージが表示されます。

クエリを書き換える

この問題を解決するには、一貫した結合構文を使用してクエリを書き直す必要があります。考えられる解決策の 1 つは、明示的な結合を使用することです:

<code class="language-sql">SELECT DISTINCT
  a.maxa,
  b.mahuyen,
  a.tenxa,
  b.tenhuyen,
  ISNULL(dkcd.tong, 0) AS tongdkcd
FROM phuongxa AS a
INNER JOIN quanhuyen AS b ON LEFT(a.maxa, 2) = b.mahuyen
LEFT OUTER JOIN (
  SELECT
    maxa,
    COUNT(*) AS tong
  FROM khaosat
  WHERE CONVERT(datetime, ngaylap, 103) BETWEEN '2011年9月1日' and '2011年9月5日'
  GROUP BY maxa
) AS dkcd ON dkcd.maxa = a.maxa
WHERE a.maxa  '99'
ORDER BY a.maxa;</code>
ログイン後にコピー

このクエリでは、すべての結合が明示的であり、テーブル名はすべての場合においてエイリアスを使用して修飾されます。これにより、dkcd の ON 句内の a.maxa への参照が有効であることが保証されます。

ORDER BY句の説明

@Aaron Bertrand が提案しているように、ORDER BY 句で特定のエイリアス a を使用して maxa を修飾することをお勧めします。

<code class="language-sql">ORDER BY a.maxa;</code>
ログイン後にコピー
これにより、ソートが正しい列で実行されることが保証されます。 日付の形式もわかりやすく調整されています。

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

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