簡體   English   中英

在PostgreSQL的HSTORE中查找鍵值對

[英]Find key value pair in PostgreSQL's HSTORE

給定表games和列identifiers ,其類型為HSTORE

| id | name             | identifiers                        |
|----|------------------|------------------------------------|
| 1  | Metal Gear       | { sku: 109127072, ean: 512312342 } |
| 2  | Theme Hospital   | { sku: 399348341 }                 |
| 3  | Final Fantasy    | { ean: 109127072, upc: 999284928 } |
| 4  | Age of Mythology | { tbp: 'a998fa31'}                 |
| 5  | Starcraft II     | { sku: 892937742, upc: 002399488 } |

如何查找給定的一組鍵值對是否在數據庫中至少有一個匹配?

例如,如果我提供這個數組: [ {sku: 109127072 }, { upc: 999284928 } ] ,我應該看到:

| id | name           | identifiers                        |
|----|----------------|------------------------------------|
| 1  | Metal Gear     | { sku: 109127072, ean: 512312342 } |
| 3  | Final Fantasy  | { ean: 109127072, upc: 999284928 } |

對於rails 5,您應該嘗試使用or運營商:

h = { sku: 109127072, upc: 999284928 }
rela = Person.where("identifiers -> ? = ?", h.keys.first, h[h.keys.first])
h.keys[1..-1].reduce(rela) {|rela, key| rela.or("identifiers -> ? = ?", key, h[key]) }
# => relation with ored-arguments

對於非第5個軌道,您應使用這里描述的arel。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM