2016-11-08 17 views
0

私はテーブルフィールドjsonbタイプを持ち、以下のデータを持っています。postgresql json配列フィールドからデータを取得する方法

{"roles": ["7", "73", "163"]} 

「73」がpostgresqlに存在するかどうかをチェックする必要があります。

私はすでに検索していますが、配列のオブジェクトではないオブジェクトのオブジェクトに対してソリューションを提供しています。

私は、クエリの下に試してみましたが、それは

SELECT * 
FROM table 
WHERE field->'roles' ? ARRAY ['73']; 

--updated--

を動作しません。また、私は正確な値

{「役割」を持っているだけで、そのレコードが必要になります[ "7"]}

{ "ロール":[ "7"、 "73"、 "163"]}

すなわちフィールドのみ」を有します7 "それ以外のものはありません。すべての例のドキュメントhttps://www.postgresql.org/docs/current/static/functions-json.html#FUNCTIONS-JSONB-OP-TABLEことで

+0

なぜ左右JSON配列に存在する時のキーあなたは 'ARRAY ['73']'を使っていますか?あなたのクエリは 'WHERE field - > 'roles'だけでうまくいきますか? '73' '。 – Marth

+1

@マース:ありがとうインターネットでの解決策とスタックオーバーフローのために半日以上の検索を行っていますが、それは分かります。 – Sandeep

+0

@Marth:また、その正確な配列に一致する必要があります。それで私はARRAY ['73 ']を使っているのですが、うまくいきません:( – Sandeep

答えて

1

は-single-キーはJSON配列内に存在しない:

SELECT * 
FROM table 
WHERE field -> 'roles' ? '73'; 

は、右のキーの-any-をいJSON配列に存在します:

SELECT * 
FROM table 
WHERE field -> 'roles' ?| ARRAY[ '7', '163' ] ; 

は-all-い

SELECT * 
FROM table 
WHERE field -> 'roles' ?& ARRAY[ '7', '163' ] ; 

は、右のJSON配列とJSON配列の一致-exactly-を残しん:

SELECT * 
FROM table 
WHERE field -> 'roles' = $$[ "7" ]$$::jsonb ; 

をうまくいけば、助け:)

+0

ありがとうございました。 – Sandeep

関連する問題