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

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

Mary-Kate Olsen
リリース: 2025-01-17 03:37:08
オリジナル
359 人が閲覧しました

Why Does My SQL Query Result in a

SQL クエリ エラー: 「マルチパート識別子をバインドできません」

問題の説明

SQL クエリの実行中に、「マルチパート識別子 '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 ,
        quanhuyen b
        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'
        AND LEFT(a.maxa, 2) = b.mahuyen
ORDER BY maxa;</code>
ログイン後にコピー

エラーの理由

このエラーは、クエリ内で明示的結合と暗黙的結合が不適切に混在していることが原因で発生します。 JOIN キーワードで表現された明示的な結合は、暗黙的な結合 (カンマと WHERE 句を使用して指定) よりも優先されます。

指定されたクエリでは、テーブル a と b を明示的に結合し、LEFT OUTER JOIN 構文を使用してその結合の結果に暗黙的に dkcd を実行します。ただし、a は dkcd 明示的接続の一部ではないため、ON 句内の 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>
ログイン後にコピー

この変更されたクエリでは、明示的な結合が明確に定義されており、a.maxa への参照は ON 条件で有効です。 Aaron Bertrand が提案したように、潜在的な曖昧さを避けるために、ORDER BY 句で a エイリアスも指定する必要があります。

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

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