「マルチパート識別子をバインドできません」エラーを解決します
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 サイトの他の関連記事を参照してください。