data_filtersという名前のjsonbカラムのキー['kommune'、 'fylke'、 'år']を含む行の後ろを照会しようとしています。PostgreSQL(正確にこれらのキー)で正確なjsonキーが一致するかどうかの問い合わせ
私が見ることができる限り、このオペレータは?&
しか持っていませんが、私はこれらすべてのキーを持つすべての行を与えていますが、(例えば)キー '趣味'を持つ行は望ましくありません。これまでのところ、私はこの使用しています:
select * from main_dataitem
where array['fylke', 'kommune', 'år'] @> ARRAY(select jsonb_object_keys(data_filters))
and ARRAY(select jsonb_object_keys(data_filters)) @> array['fylke', 'kommune', 'år'];
をしかし、これは、いずれかがこれを照会するためのより良い方法を持って、最適な解決策のように見えるしていませんか?
select * from main_dataitem where data_filters ?& array['fylke', 'kommune', 'år'];
配列を取得するには、 'array(xによってjsonb_object_keys(data_filters)からxを選択)'を使い、 '='だけを使って順序付き定数配列と比較します。 – Abelisto
私は両方の配列をソートしなければならないでしょうか?また、これは高速ですか? –
1)はい、両方の配列をソートする必要があります( 'array [1,2]!= array [2,1]')2)試してみてください。 IMOは速くなければなりませんが、私はJSONとして構造化されたデータを格納するというファンではありませんので、私はそれをあまり使い慣れていません。 – Abelisto