ORDER BY expressions must appear in select list

次のような PostgreSQL の SQL エラーがあります。

SELECT DISTINCT, ORDER BY expressions must appear in select list

これは SELECT DISTINCT を使用している場合に、 ORDER BY 句に含まれている項目が SELECT 句にない場合に発生します。

例えば、次のような SQL です。

SELECT DISTINCT
       field_1
     , field_2
FROM test_table
ORDER BY field_3

SELECT DISTINCT されているのは field_1 と field_2 ですが ソートは field_3 を指定しています。

これでは結果の並び順を保証することができないため エラーが発生するわけです。

ちなみに Oracle の場合は、次のようなエラーになります。

ORA-01791: SELECT式が無効です

ただ、Oracle は さらに賢いようで、次のような場合はエラーになりません。 ( PostgreSQL はエラーになります)

SELECT DISTINCT
       field_1
     , field_2
FROM test_table
WHERE field_3 = '0'
ORDER BY field_3

この場合は、field_3 が 1つに固定されるため、 "ソート指定なし" と同じ状態になるためエラーになりません。

Google サイト内検索

Amazonアソシエイト