在 WHERE 子句中使用 ANY 取代 IN
在傳統的 IN 子句之外,您可以考慮使用 ANY 來過濾 WHERE 子句中的結果。 PostgreSQL 提供了兩種語法變體:
IN 表達式:
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中文網其他相關文章!