MySQLクエリのWHERE句で列エイリアスを使用するとエラーが発生します 質問する

MySQLクエリのWHERE句で列エイリアスを使用するとエラーが発生します 質問する

実行しているクエリは次のとおりです。ただし、次のエラーが発生します。

#1054 - 'IN/ALL/ANY サブクエリ' に不明な列 'guaranteed_postcode' があります

SELECT `users`.`first_name`, `users`.`last_name`, `users`.`email`,
SUBSTRING(`locations`.`raw`,-6,4) AS `guaranteed_postcode`
FROM `users` LEFT OUTER JOIN `locations`
ON `users`.`id` = `locations`.`user_id`
WHERE `guaranteed_postcode` NOT IN #this is where the fake col is being used
(
 SELECT `postcode` FROM `postcodes` WHERE `region` IN
 (
  'australia'
 )
)

私の質問は、同じ DB クエリの where 句で偽の列を使用できないのはなぜかということです。

ベストアンサー1

列エイリアスは、GROUP BY、ORDER BY、または HAVING 句でのみ使用できます。

標準 SQL では、WHERE 句で列の別名を参照することはできません。この制限は、WHERE コードの実行時に列の値がまだ決定されていない可能性があるために課せられます。

MySQLドキュメントからコピー

コメントで指摘されているように、代わりに HAVING を使用するとうまくいくかもしれません。この質問も必ず読んでください: WHERE vs HAVING

おすすめ記事