WHERE 句で IN の代わりに ANY を使用する方法
Rails に、ID のリストを含む IN を使用して SQL を生成する MyModel.where(id: ids)
のようなクエリがあるとします。
SELECT "my_models".* FROM "my_models" WHERE "my_models".`"id"` IN (1, 28, 7, 8, 12)
MyModel.where("id = ANY(VALUES(#{ids.join '),('}))")
配列が空の場合、このアプローチは失敗し、SQL 構文エラーが発生します。 ids
IN と ANY を理解します
IN 式と ANY 式には 2 つの形式があります:
expression IN (subquery)
expression IN (value [, ...])
expression ANY (array expression)
ANY と IN を使用する場合
ANY は、ブール値を返す任意の演算子とともに使用できる、より一般的なオプションです。 IN は ANY の特殊なケースです。パフォーマンスの点では、ANY が
よりも高速であることはなく、= ANY
は IN よりもそれほど高速ではありません。選択は利便性に基づいて行う必要があります。 = ANY
、または VALUES 式の使用を検討してください。 unnest()
= 任意の の構文
Postgres は次の形式の配列式を受け入れます:
ARRAY[1,2,3]
{1,2,3}
。 ARRAY[1,2,3]::numeric[]
Ruby から配列を渡す方法
が整数であると仮定します: id
以上がWHERE 句で IN の代わりに ANY を使用する必要があるのはどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。