PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Защо не мога да правя заявки директно на jsonb_array_elements?

Както се казва в съобщението за грешка, аргументи за 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 в набор от резултати и да търсите в него.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostreSQL 10 не успява да стартира на Ubuntu 18.04, работещ на Windows подсистема за Linux

  2. Генериране на броя на отворените билети във времето, дадени дати на отваряне и затваряне

  3. SQLAlchemy, Declarative, PostgreSQL:не може да създава таблици

  4. Задействане на задействане при актуализиране на колона A или ColumnB или ColumnC

  5. Как да получите локално време на сървърната ОС във всички версии на Postgres