2017-01-29 6 views
0

私は以下のJSONをjsonb型のカラムに格納しています。私は、外側の配列の2番目の要素を照会し、 'cid'列の値を持つすべての行を 'CID1'としてフィルターしたいと思います。PostgreSQL JSONBカラムでのフィルタリングが機能しない

{"root":[[ 
      {"cid":"CID1","Display":"User One","FName":"User","LName":"One"}, 
      {"cid":"CID1","Display":"User Two","FName":"User","LName":"Two"}, 
      {"cid":"CID1","Display":"User Three","FName":"User","LName":"Three"}, 
      {"cid":"CID2","Display":"User One","FName":"User","LName":"One"}, 
      {"cid":"CID2","Display":"User Two","FName":"User","LName":"Two"}, 
      {"cid":"CID2","Display":"User Three","FName":"User","LName":"Three"}  

      ], 
      [ 
      {"cid":"CID1","Display":"User One","FName":"Userfff","LName":"One"}, 
      {"cid":"CID1","Display":"User Two","FName":"User","LName":"Two"}, 
      {"cid":"CID1","Display":"User Three","FName":"User","LName":"Three"}, 
      {"cid":"CID2","Display":"User One","FName":"User","LName":"One"}, 
      {"cid":"CID2","Display":"User Two","FName":"User","LName":"Two"}, 
      {"cid":"CID2","Display":"User Three","FName":"User","LName":"Three"}  
      ]]} 

私は次のクエリを書いて、JSONオブジェクトとして二番目の配列からすべての行を取り出すことに成功した、私はそれらをフィルタリングしようとすると、しかし、私は

42703エラーを取得している:列を " filterinは、」私は列でフィルタリングすることができていますように、私は次のクエリでは何を修正する必要があり

select jsonb_array_elements((ARRAY(select jsonb_array_elements(msg->'root') ele))[2]::jsonb) filterin 
from js 
where filterin->>'cid'='CID1'; 

存在しないのですか?

+0

は完全に働いた、おかげで@Sami – puneet

+0

@Samiは、あなたがjsonb列にGINインデックスを置くことは良いだろうと思いますか? – puneet

答えて

1

出力別名はWHERE部分では使用できません。サブクエリまたは定義を複製する2つの選択肢があります。

select jsonb_array_elements((ARRAY(select jsonb_array_elements(msg->'root') ele))[2]::jsonb) filterin 
from js 
where jsonb_array_elements((ARRAY(select jsonb_array_elements(msg->'root') ele))[2]::jsonb)->>'cid'='CID1'; 

または

SELECT filterin FROM 
(select jsonb_array_elements((ARRAY(select jsonb_array_elements(msg->'root') ele))[2]::jsonb) filterin 
from js) data 
WHERE filterin->>'cid'='CID1'; 
関連する問題