エラーメッセージにあるように、WHERE
への引数 セットを返してはいけません。 jsonb_array_elements
セットを返し、単一の値と比較することはできません。 2番目のクエリでは、select内にクロス結合があり、WHERE
を使用するのに適した結果に変換されます。 オン。
この方法でもできます
SELECT mydata.pk FROM mydata
WHERE 'Bob' in (SELECT jsonb_array_elements(mydata.data->'people')->>'name');
ここで副選択すると、IN
を使用できるようになります 結果がセットではなくなったため、演算子を使用して目的の値を見つけます。
もう1つの方法は、jsonbに直接クエリを実行することです
SELECT mydata.pk FROM mydata
WHERE mydata.data->'people' @> '[{"name":"Bob"}]'::jsonb;
このように、jsonbを結果セットに変換してその中を検索する必要はありません。