2015-09-10 54 views
1

鑑於表-A這樣的:選擇 「其中」 與PostgreSQL和JSONB

id | name 
----+------ 
    1 | aaaa 
    2 | bbbb 
    3 | cccc 

我可以明顯地發出以下查詢:

SELECT * FROM table_a WHERE name IN ('aaaa', 'bbb'); 

但考慮到表-B這樣的:

id |  data 
----+------------------ 
    1 | {"name": "aaaa"} 
    2 | {"name": "bbbb"} 
    3 | {"name": "cccc"} 

我該如何發出一個查詢「給我所有包含這個值列表的鍵名的值的行?」

我知道我可以使用jsonb operator @>來檢查每個組合,但不幸的是我不得不發出儘可能多的查詢作爲我想檢查的值的數量。有沒有辦法做到這一點在一個查詢

UPDATE:

我找到了解決的時候了:

select * from table_b where data #>> '{name}' IN ('aaaa', 'bbb'); 

回答

2
SELECT * FROM table_a WHERE data->>'name' IN ('aaaa', 'bbbb') 

好像這是你想要的嗎?

+0

謝謝,我在此期間找到了一個類似的解決方案:D我會在這裏留下問題,因爲我很難用谷歌上的常見關鍵字找到它。顯然他們也有類似的查詢計劃。 –

+1

@GuybrushThreepwood:由於答案是正確的,你需要考慮接受它。 [手冊中的''json' /'jsonb'操作符。](http://www.postgresql.org/docs/current/interactive/functions-json.html) –