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 サイトの他の関連記事を参照してください。