ホームページ >データベース >mysql チュートリアル >PostgreSQL でエイリアスで注文し、「列が存在しません」エラーを回避する方法
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 サイトの他の関連記事を参照してください。