そのクエリの記述方法は次のとおりです。
SELECT * FROM member_copy WHERE id IN (17579, 17580, 17582);
ただし、本当の問題は、どこにあるかです。 id
のリストはどこから来たのですか? id
のリストが別のデータベースクエリの結果である場合は、代わりに副選択または結合を実行する必要があります。
コメント
EXPLAIN ANALYZE VERBOSE
は、@ 200_success の回答にid IN (...)
が含まれるフォームが内部的に次のように変換されることを示します。 p>
SELECT * FROM member_copy WHERE id = ANY ("{17579, 17580, 17582}");
..したがって、最初は少し速く実行されます(変換は必要ありません)。
また、質問のフォームは効果的に実行されます似ている。
大きなリストの場合、配列のネストを解除し、その後にJOIN
を続けると一般的に高速になります:
SELECT m.* FROM unnest("{17579, 17580, 17582}"::int[]) id JOIN member_copy m USING (id);
リストはis the result of another database query
であるため、両方を1つにまとめるのが最も高速です JOIN
を使用したクエリ。
詳細な説明: