ホームページ > データベース > mysql チュートリアル > WHERE 句で IN の代わりに ANY を使用する必要があるのはどのような場合ですか?

WHERE 句で IN の代わりに ANY を使用する必要があるのはどのような場合ですか?

Linda Hamilton
リリース: 2025-01-14 20:37:44
オリジナル
305 人が閲覧しました

When Should I Use ANY Instead of IN in a WHERE Clause?

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)
ログイン後にコピー
IN の代わりに ANY を使用するには、以下を試してください:

MyModel.where("id = ANY(VALUES(#{ids.join '),('}))")
ログイン後にコピー
ただし、

配列が空の場合、このアプローチは失敗し、SQL 構文エラーが発生します。 ids

IN と ANY を理解します

IN 式と ANY 式には 2 つの形式があります:

  • expression IN (subquery)
  • または expression IN (value [, ...])expression ANY (array expression)
2 番目の形式では、IN は値のリストを想定し、ANY は配列を想定します。

ANY と IN を使用する場合

ANY は、ブール値を返す任意の演算子とともに使用できる、より一般的なオプションです。 IN は ANY の特殊なケースです。

パフォーマンスの点では、ANY が

よりも高速であることはなく、= ANY は IN よりもそれほど高速ではありません。選択は利便性に基づいて行う必要があります。 = ANY

ID がデータベースから取得された場合は、サブクエリまたは JOIN を使用する方が効率的です。クライアントから値の長いリストを渡すときに最高のパフォーマンスを得るには、配列、

、または VALUES 式の使用を検討してください。 unnest()

= 任意の の構文

Postgres は次の形式の配列式を受け入れます:

    配列コンストラクター:
  • ARRAY[1,2,3]
  • 配列リテラル:
  • {1,2,3}
型変換を回避するには、配列を明示的にキャストします:

ARRAY[1,2,3]::numeric[]

Ruby から配列を渡す方法

が整数であると仮定します: id

以上がWHERE 句で IN の代わりに ANY を使用する必要があるのはどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート