powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Работа с json_array_elements
6 сообщений из 6, страница 1 из 1
Работа с json_array_elements
    #38795711
deadka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте,

исходные данные моей головоломки -

Код: plsql
1.
2.
3.
CREATE TABLE "t" ("id" serial,"value" json NOT NULL,CONSTRAINT "t_pkey" PRIMARY KEY (id));

INSERT INTO "t" ("id","value") VALUES(1,'[{"code":"1", "name":"Name1"},{"code":"2","name":"Name2"}]');



Нужно извлечь то name, у которого code = 1.

Смог извлечь только так

Код: plsql
1.
SELECT elem->>'code',elem->>'name' FROM t,json_array_elements("value") AS elem WHERE elem->>'code' = '1';



В то же время попытка извлечь через

Код: plsql
1.
SELECT * FROM t WHERE (json_array_elements("value")->>'code') = '1';



возвращает

ОШИБКА: аргумент конструкции WHERE не должен возвращать множество
LINE 42: SELECT * FROM t WHERE (json_array_elements("value")->>'code'...

Собственно, вопрос - можно ли как-то в where указать нужное мне условие, не создавая таблицу с алиасом elem в запросе?
...
Рейтинг: 0 / 0
Работа с json_array_elements
    #38795849
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
deadka,

скорее всего нет так как
Код: plaintext
1.
2.
3.
4.
5.
select json_array_elements("value") from t;
     json_array_elements
------------------------------
 {"code":"1", "name":"Name1"}
 {"code":"2","name":"Name2"}

возвращает set и с ним надо работать как с set ом

но я бы сказал что понятнее и правильнее будет переписать ваш запрос таким образом:
Код: plsql
1.
select val->>'code', val->>'name' from (select json_array_elements("value") as val from t) as elem WHERE val->>'code' = '1';



--Maxim Boguk
www.postgresql-consulting.ru
...
Рейтинг: 0 / 0
Работа с json_array_elements
    #38795934
V&N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
V&N
Гость
Код: plsql
1.
2.
3.
4.
5.
WITH t AS 
   (  select id, value::json as value from (VALUES(1,'[{"code":"1", "name":"Name1"},{"code":"2","name":"Name2"}]')) as t(id, value)  )
 select *
   from t 
   where exists(select json_array_elements(value)->>'code' = '1')
...
Рейтинг: 0 / 0
Работа с json_array_elements
    #38795939
V&N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
V&N
Гость
V&N, не то.
...
Рейтинг: 0 / 0
Работа с json_array_elements
    #38795945
V&N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
V&N
Гость
о
Код: plsql
1.
2.
3.
4.
5.
WITH t AS 
   (  select id, value::json as value from (VALUES(1,'[{"code":"1", "name":"Name1"},{"code":"2","name":"Name2"}]'), (5,'[{"code":"3", "name":"Name1"},{"code":"5","name":"Name2"}]')) as t(id, value)  )
 select *
   from t 
   where exists(select 1 from (select json_array_elements(value)->>'code' as code) x(x) where x = '1' )
...
Рейтинг: 0 / 0
Работа с json_array_elements
    #38796999
deadka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cпасибо!
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Работа с json_array_elements
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]