MySQL WHERE 句と列エイリアス: 「#1054 - 不明な列」エラーのトラブルシューティング
WHERE 句内で列のエイリアスを使用すると、MySQL クエリで「#1054 - 'IN/ALL/ANY subquery' に不明な列 'guaranteed_postcode'」というエラーが発生することがあります。これは、実行中の列値の決定に矛盾が生じる可能性があるため、標準 SQL では WHERE 句でのエイリアスの使用が禁止されているためです。 WHERE 句が処理されるとき、データベースはまだエイリアスに値を割り当てていません。
MySQL マニュアルには、エイリアスは GROUP BY、ORDER BY、または HAVING 句でのみ有効であると明確に記載されています。 これらの句はデータ取得後に動作し、エイリアスの可用性を保証します。
クエリでは、WHERE 句で SUBSTRING(locations.raw,-6,4)
としてエイリアスされた guaranteed_postcode
が使用されている可能性があります。 MySQL はカラム値が計算される前にエイリアスに遭遇するため、エラーが生成されます。
これを修正するには、HAVING 句 (集計関数または計算の場合) または WHERE 句内のサブクエリを使用します。 サブクエリは、メイン クエリの WHERE 句でエイリアスを直接使用することを回避し、MySQL のルールに違反することなく必要なフィルタリングを提供します。
以上がWHERE 句で列エイリアスを使用すると、MySQL が「#1054 - 不明な列」エラーをスローするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。