ホームページ >データベース >mysql チュートリアル >PostgreSQL でエイリアスで注文し、「列が存在しません」エラーを回避する方法

PostgreSQL でエイリアスで注文し、「列が存在しません」エラーを回避する方法

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-22 18:09:15837ブラウズ

How to Order By an Alias in PostgreSQL and Avoid the

PostgreSQL でエイリアスで注文する方法: 「列が存在しません」エラーを解決する

PostgreSQL でエイリアスを使用する場合、結果を並べ替えるときにエラーが発生する可能性があります。たとえば、次のクエリについて考えてみましょう:

SELECT 
    title, 
    (stock_one + stock_two) AS global_stock
FROM
    product
ORDER BY
    global_stock = 0,
    title;

このクエリを PostgreSQL 8.1.23 で実行すると、次のエラーが発生する可能性があります: クエリが失敗しました: エラー: 列 "global_stock" が存在しません。このエラーは、エイリアス「global_stock」が「product」テーブルの既存の列として認識されないために発生します。

この問題を解決するには、いくつかのオプションがあります:

オプション1: Order By Position

PostgreSQL では、列の名前ではなく位置によって並べ替えることができます。たとえば、次のように記述できます。

select 
    title, 
    ( stock_one + stock_two ) as global_stock
from product
order by 2, 1

このクエリは、最初に 2 番目の列 (「global_stock」) で結果を並べ替え、次に最初の列 (「title」) で結果を並べ替えます。

オプション 2: サブクエリでラップする

別の方法では、元のクエリをサブクエリでラップします。サブクエリを作成し、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

このクエリは、まず「global_stock」値を計算するサブクエリを作成します。次に、サブクエリは、CASE ステートメントを使用する別の SELECT ステートメントでラップされ、項目の可用性に基づいて結果を並べ替えます (0 は使用可能、1 は使用不可)。

以上がPostgreSQL でエイリアスで注文し、「列が存在しません」エラーを回避する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。