MySQL WHERE 句: エイリアスの制限
MySQL では、可読性を向上させるために列のエイリアスを使用したり、クエリ内で新しい式を作成したりできます。 ただし、WHERE
句内でエイリアスを直接使用すると、多くの場合「不明な列」エラーが発生します。これは、WHERE
句がエイリアスが割り当てられる前の行をフィルタリングするためです。
回避策:
解決策の 1 つは、HAVING
句の使用です。 WHERE
とは異なり、HAVING
はグループ化と集計の後 を操作し、クエリ内で作成されたエイリアスへの参照を許可します。
<code class="language-sql">SELECT *, AVG(rev_rating) AS avg_rating FROM reviews GROUP BY rev_id HAVING avg_rating > 5;</code>
ここでは、avg_rating
は HAVING
内で正しく参照されています。
WHERE
句で同様のフィルタリングを実現するには、エイリアスを完全な式で置き換える必要があります。
<code class="language-sql">SELECT * FROM reviews WHERE (SUM(reviews.rev_rating) / COUNT(reviews.rev_id)) > 5;</code>
重要な考慮事項:
WHERE
句は、すべての式、特にエイリアス内で使用される SUM()
や AVG()
などの集計関数をサポートしているわけではありません。 このような場合、HAVING
は必須です。
MySQL ドキュメントで説明されているように、WHERE
句の実行時に値が計算されない可能性があるため、WHERE
での列エイリアスの参照は許可されません。
以上がMySQL の WHERE 句でエイリアスを使用できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。