2017-08-08 12 views
1

私はjsonb型のカラムを1つ持っています。この列のデータはどのように私はf.e.をしたい場合は、この列に選択する書き込みにjsonb列からデータを選択する方法は?

{ 
    "random_number1": 
    { 
     "random_number2": 
     { 
      "Param1": 2, 
      "Param2": 0, 
      "Param3": 0, 
      "Param4": 6, 
      "Param5": 3 
     } 
    } 
} 

以下のように見えます"Param3" = 6のすべての行? は、私はそれはあなたの期待に依存する

SELECT * FROM table WHERE column->'Param3' @> '6'::jsonb; 

答えて

2

のようなものを試してみました。

指定したパスの値を取得:

select t.* 
from my_table t, 
jsonb_each(my_col) as level1(key1, value1), 
jsonb_each(value1) as level2(key2, value2) 
where jsonb_typeof(my_col) = 'object' 
and jsonb_typeof(value1) = 'object' 
and value2->>'Param3' = '6'; 

第2のケースで使用することがあります。

select * 
from my_table 
where my_col->'random_number1'->'random_number2'->>'Param3' = '6' 

は、第3レベル上の任意のオブジェクトのキーParam3の値を取得しますクエリとしてdistinctが重複した行を生成する可能性があります。

+0

問題は、random_number1とrandom_number2は常に異なる数値です – Jens

+0

したがって、回答には2つのバリエーションがあります。 2番目のものを使用してください。 – klin

+0

しかし、2番目のケースでは、 "非オブジェクト上でjsonb_eachを呼び出せません"というエラーが発生しました – Jens

関連する問題