ホームページ > データベース > mysql チュートリアル > 「列が存在しません」エラーを発生させずに PostgreSQL ORDER BY 句でエイリアスを使用するにはどうすればよいですか?

「列が存在しません」エラーを発生させずに PostgreSQL ORDER BY 句でエイリアスを使用するにはどうすればよいですか?

DDD
リリース: 2024-12-29 12:18:10
オリジナル
145 人が閲覧しました

How Can I Use an Alias in a PostgreSQL ORDER BY Clause Without Getting a

PostgreSQL ORDER BY 句での ALIAS の使用

PostgreSQL クエリの ORDER BY 句でエイリアスを利用しようとすると、一部のユーザーにエラー「列」が発生します。存在しません。"

問題説明

次の例を考えてみましょう。

SELECT 
    title, 
    (stock_one + stock_two) AS global_stock
FROM
    product
ORDER BY
    global_stock = 0,
    title;
ログイン後にコピー

PostgreSQL 8.1.23 でこのクエリを実行すると、「列 'global_stock' が存在しません。」というエラーが発生します。このエラーは、エイリアスが ORDER BY 句で認識されないために発生します。

解決策

考えられる解決策は 2 つあります。

1。数値順序:

エイリアスを使用する代わりに、SELECT 句内の位置によって列を参照できます。上の例では、'global_stock' エイリアスは列 2 に対応します。したがって、変更されたクエリは次のようになります:

SELECT 
    title, 
    (stock_one + stock_two) AS global_stock
FROM
    product
ORDER BY
    2, 1;
ログイン後にコピー

2。 CASE 式を使用したサブクエリ:

もう 1 つのオプションは、サブクエリと CASE 式を使用することです:

SELECT *
FROM
(
    SELECT 
        title, 
        (stock_one + stock_two) AS global_stock
    FROM
        product
) x
ORDER BY
    (CASE WHEN global_stock = 0 THEN 1 ELSE 0 END) DESC, title;
ログイン後にコピー

この場合、CASE 式は次の行に値 1 を割り当てます。 'global_stock' = 0、その他すべては 0。次に、クエリはこの値に基づいて結果を降順に並べ替え、使用可能なアイテムに効果的に優先順位を付けます。

以上が「列が存在しません」エラーを発生させずに PostgreSQL ORDER BY 句でエイリアスを使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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