sql >> Databáze >  >> RDS >> PostgreSQL

Proč nemohu dotazovat přímo na jsonb_array_elements?

Jak říká chybová zpráva, argumenty pro WHERE nesmí vrátit sadu. jsonb_array_elements vrací množinu a nelze ji porovnat s jedinou hodnotou. Ve druhém dotazu máte křížové spojení uvnitř výběru a to jej převede na vhodný výsledek pro použití WHERE zapnuto.

Můžete to udělat také tímto způsobem

SELECT mydata.pk FROM mydata
  WHERE 'Bob' in (SELECT jsonb_array_elements(mydata.data->'people')->>'name');

Zde vám podvýběr umožní použít IN operátor najít požadovanou hodnotu, protože výsledek již není množina.

Dalším způsobem je dotaz jsonb přímo

SELECT mydata.pk FROM mydata
  WHERE mydata.data->'people' @> '[{"name":"Bob"}]'::jsonb;

Tímto způsobem nemusíte převádět jsonb na sadu výsledků a hledat v ní.




  1. mysql_real_escape_string VS addlashes

  2. Ověřte vlastnost souvisejícího modelu v Yii

  3. Jak získat ID prvku do proměnné PHP

  4. Vložit do výběru a aktualizovat v jediném dotazu