Seperti yang dikatakan pesan kesalahan, argumen ke WHERE
tidak harus mengembalikan satu set. jsonb_array_elements
mengembalikan satu set dan tidak dapat dibandingkan dengan satu nilai. Dalam kueri kedua Anda memiliki gabungan silang di dalam pilih dan yang mengubahnya menjadi hasil yang sesuai untuk menggunakan WHERE
aktif.
Anda juga bisa melakukannya dengan cara ini
SELECT mydata.pk FROM mydata
WHERE 'Bob' in (SELECT jsonb_array_elements(mydata.data->'people')->>'name');
Di sini subselect akan memungkinkan Anda untuk menggunakan IN
operator untuk menemukan nilai yang diinginkan karena hasilnya bukan lagi himpunan.
Cara lain adalah dengan menanyakan jsonb secara langsung
SELECT mydata.pk FROM mydata
WHERE mydata.data->'people' @> '[{"name":"Bob"}]'::jsonb;
Dengan cara ini Anda tidak perlu mengonversi jsonb menjadi kumpulan hasil dan mencari di dalamnya.