Както се казва в съобщението за грешка, аргументи за WHERE
не трябва да връща комплект. jsonb_array_elements
връща набор и не може да се сравни с една стойност. Във втората заявка имате кръстосано свързване вътре в избраното и това го преобразува в подходящ резултат за използване на WHERE
на.
Можете да го направите и по този начин
SELECT mydata.pk FROM mydata
WHERE 'Bob' in (SELECT jsonb_array_elements(mydata.data->'people')->>'name');
Тук подизборът ще ви позволи да използвате IN
оператор за намиране на желаната стойност, тъй като резултатът вече не е набор.
Друг начин е да направите заявка директно към jsonb
SELECT mydata.pk FROM mydata
WHERE mydata.data->'people' @> '[{"name":"Bob"}]'::jsonb;
По този начин не е необходимо да конвертирате jsonb в набор от резултати и да търсите в него.