ホームページ >データベース >mysql チュートリアル >PostgreSQL の WHERE 句では IN または ANY を使用する必要がありますか?

PostgreSQL の WHERE 句では IN または ANY を使用する必要がありますか?

DDD
DDDオリジナル
2025-01-14 20:42:48920ブラウズ

Should I Use IN or ANY in PostgreSQL WHERE Clauses?

WHERE 句で IN

の代わりに ANY を使用します

従来の IN 句に加えて、ANY を使用して WHERE 句の結果をフィルタリングすることを検討できます。 PostgreSQL には 2 つの構文バリエーションがあります:

IN 式:

  • 式 IN (サブクエリ)
  • 式 IN (値 [, ...])

任意の式:

  • 式演算子 ANY (サブクエリ)
  • 式演算子 ANY (配列式)

どちらのメソッドでもサブクエリを使用できますが、2 番目の形式では期待される内容が異なります。

どうやって選ぶの?

次の点を考慮してください:

  • ANY は柔軟性が高く、ブール値を返す任意の二項演算子とともに使用できます。
  • IN は ANY の特殊なケースであり、= ANY のように動作します。

パフォーマンスの点では、ANY が IN より大幅に高速である可能性は低いです。この 2 つのどちらを選択するかは、主に、フィルター処理された値を提供する利便性に依存します。

サブクエリメソッド:

フィルター値がデータベースにすでに存在する場合は、サブクエリを使用するか、ソーステーブルをターゲットテーブルに結合することで効率が向上します。

配列メソッド:

最高のパフォーマンスを得るには、配列、unnest() または join を介してクライアントから大きな数値を指定するか、VALUES を使用してテーブル式を指定します。

= 任意の構文:

配列式の場合、PostgreSQL は配列コンストラクター (ARRAY[1,2,3]) または配列リテラル ('{1,2,3}') を受け入れます。型安全性を確保するために、明示的な型変換を使用できます:

<code class="language-sql">ARRAY[1,2,3]::numeric[]
'{1,2,3}'::bigint[]</code>

Ruby から配列を渡す:

Ruby から配列を渡すには、次の構文を使用します:

<code class="language-ruby">MyModel.where('id = ANY(ARRAY[?]::int[])', ids.map { |i| i})</code>

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。