假設我們有一個包含“顏色”和“尺寸”列的表格。我有一個包含顏色大小組合的串列(例如[(red, small), (blue, medium)]),其中長度未知。應根據此串列過濾表,以便結果僅包含組合適用的行。
基于示例的查詢如下所示:
SELECT * FROM items WHERE ((color = 'red' AND size = 'small') OR (color = 'blue' and size = 'medium'));
引數化這個查詢當然是行不通的,因為組合的數量是不同的。
有沒有辦法使用引數化查詢來實作這一點,比如在node-postgres中使用的那些?我能想到的唯一解決方案是使用字串插值,這似乎并不安全。
uj5u.com熱心網友回復:
IN對于運營商來說,這看起來是個好場景
select * from items where
(color, size) in (('red','small'), ('blue','medium'))
并且可以使用陣列對其進行引數化
select * from items where
(color, size) in (
select unnest (array['red','blue']), unnest(array['small','medium']))
第一個陣列用于顏色,第二個用于大小。Unnest in one select create pairs.Arrays 應具有相同數量的元素。
并且可以將陣列作為引數傳遞給查詢。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/491460.html
