ホームページ > データベース > mysql チュートリアル > MySQL で ANSI JOIN とカンマ区切りテーブルを混在させると「不明な列」エラーが発生するのはなぜですか?

MySQL で ANSI JOIN とカンマ区切りテーブルを混在させると「不明な列」エラーが発生するのはなぜですか?

Linda Hamilton
リリース: 2025-01-09 10:57:41
オリジナル
489 人が閲覧しました

Why Does Mixing ANSI JOINs and Comma-Separated Tables in MySQL Lead to

MySQL クエリで ANSI JOIN とカンマ区切りテーブルを混合して使用する場合の問題

MySQL クエリで ANSI JOIN 構文 (INNER JOIN、CROSS JOIN、LEFT JOIN) とカンマ区切りのテーブル参照を混合すると、「不明な列」エラーが発生することがあります。このエラーは、MySQL によるカンマ演算子の解釈がその位置に依存するために発生します。

質問:

次のクエリを考えてみましょう:

<code class="language-sql">SELECT m.*, t.*
FROM memebers as m, telephone as t
INNER JOIN memeberFunctions as mf ON m.id = mf.memeber
INNER JOIN mitgliedTelephone as mt ON m.id = mt.memeber
WHERE mf.function = 32</code>
ログイン後にコピー

このクエリでは、「'on 句' に不明な列 'm.id'」エラーが発生します。

解決策:

このエラーを解決するには、ANSI JOIN 構文とカンマ区切りテーブルを混在させないでください。以下の変更されたクエリに示すように、代わりに ANSI JOIN 構文のみを使用してください:

<code class="language-sql">SELECT m.*, t.*
FROM memebers as m
JOIN telephone as t ON 1=1
INNER JOIN memeberFunctions as mf ON m.id = mf.memeber AND mf.function = 32
INNER JOIN mitgliedTelephone as mt ON m.id = mt.memeber</code>
ログイン後にコピー

説明:

MySQL はクエリを次のように解釈します:

<code class="language-sql">((memembers as m JOIN telephone as t ON 1=1) INNER JOIN memeberFunctions as mf ON m.id = mf.memeber) INNER JOIN mitgliedTelephone as mt ON m.id = mt.memeber</code>
ログイン後にコピー

この構文では、JOIN 句のオペランドが明確に定義されており、「m.id」列が ON 句で正しく参照されています。 ON 1=1 キーワードには JOIN 句が必要であるため、JOIN 操作の正確性を保証するために ON が追加されます。

注:

MySQL では、カンマを使用してテーブルを区切ることはベスト プラクティスとは見なされなくなっていることに注意することが重要です。明確さを確保し、潜在的なエラーを回避するために、ANSI JOIN 構文を使用することをお勧めします。

以上がMySQL で ANSI JOIN とカンマ区切りテーブルを混在させると「不明な列」エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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