ホームページ > データベース > mysql チュートリアル > SQL の HAVING 句でエイリアスを使用できないのはなぜですか?

SQL の HAVING 句でエイリアスを使用できないのはなぜですか?

Mary-Kate Olsen
リリース: 2024-12-18 15:30:15
オリジナル
998 人が閲覧しました

Why Can't I Use Aliases in SQL's HAVING Clause?

HAVING 句でのエイリアス使用の制限について

SQL では、HAVING 句内の集計にエイリアスを使用するのが直感的に思えるかもしれません。ただし、この方法では、SQL クエリの特定の評価順序により、「列名が無効です」というエラーが発生します。

この制限を理解するには、SQL がどのようにクエリを実行するかを理解することが重要です。

  1. まず、FROM 句で指定された結合テーブルのすべての行を結合して結果セットを作成します。
  2. WHERE 句条件を満たさない行をフィルターで除外します。
  3. その後、GROUP BY 句で指定された列に基づいて行をグループ化します。
  4. 重要なことに、HAVING 句は SELECT の前に評価されます。 state. これは、この時点では SQL が SELECT 句で定義されたエイリアスをまだ認識していないことを意味します。
  5. のみHAVING 句を評価した後、SQL は SELECT リスト内の式の評価に進みます。

したがって、HAVING 句は SELECT 句よりも前に評価されるため、SELECT ステートメント内の集計に割り当てられるエイリアスは(例: "col7") は、SQL が HAVING 式を評価するときにまだ認識されていません。その結果、「列名 'col7' が無効です」というエラーが発生します。

対照的に、ORDER BY 句は SELECT ステートメントの後に評価されるため、SELECT 句で定義されたエイリアスを使用できます。これは、ORDER BY 句が SELECT ステートメントによって作成された結果セットを操作するためです。

この問題を解決するには、次に示すように、HAVING 句のエイリアスを実際の集計式に置き換えます。

select col1,count(col2)
from --some join operation
group by col1
having count(col2) >= 3
ログイン後にコピー

以上がSQL の HAVING 句でエイリアスを使用できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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