首頁 >資料庫 >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 子句中使用 ANY 取代 IN

在傳統的 IN 子句之外,您可以考慮使用 ANY 來過濾 WHERE 子句中的結果。 PostgreSQL 提供了兩種語法變體:

IN 表達式:

  • expression IN (subquery)
  • expression IN (value [, ...])

ANY 表達式:

  • expression operator ANY (subquery)
  • expression operator ANY (array expression)

雖然兩種方法都可以使用子查詢,但它們的第二種形式在預期方面有所不同。

如何選擇?

考慮以下幾點:

  • ANY 提供更大的靈活性,並且可以與任何返回布林值的二元運算子一起使用。
  • IN 是 ANY 的特例,其操作方式類似 = ANY。

在性能方面,ANY 不太可能比 IN 顯著快。兩者之間的選擇主要取決於提供篩選值的便利性。

子查詢方法:

如果篩選值已經存在於資料庫中,使用子查詢或將來源表與目標表連接可以提高效率。

陣列方法:

為了獲得最佳效能,可以透過陣列、unnest() 或連接,或使用 VALUES 提供表格運算式來從客戶端提供大量的數值。

= ANY 的語法:

對於陣列表達式,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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn