Проверьте значение в массиве json - PullRequest
0 голосов
/ 11 февраля 2020

У меня есть таблица данных, в которой есть поле с именем details, содержащее объект json.

Объект выглядит примерно так:

{
    "name": "Persons Name",
    "list": [
        {
            "name": "Persons Name",
            "assigned": {
                "company": "Company 1",
                "number": "AA1"
            }
        },
        {
            "name": "Persons Name",
            "assigned": {
                "company": "Company 2",
                "number": "BB2"
            }
        },
        {
            "name": "Persons Name",
            "assigned": {
                "company": "Company 3",
                "number": "AA3"
            }
        }
    ],
    "total_results": 3
}

По сути, я хотите вернуть все данные, если любое из полей «назначенный» - >> «номер» этого лица начинается с буквы A. В приведенном выше примере два номера физических лиц имеют префикс A, поэтому я хочу, чтобы все данные были возвращены.

Я играл и добился определенного прогресса, но не могу понять, как все это собрать вместе.

select f->'assigned'->>'number' from jsonb_array_elements((select details->'list' from table_name)) f;

Приведенный выше запрос может дать мне список из трех ' число 'полей, но я не уверен, как я могу объединить это с запросом, чтобы вернуть всю информацию, если какое-либо из этих полей содержит префикс A

1 Ответ

1 голос
/ 11 февраля 2020

Ты так близко. Просто добавьте ваше условие в пункт where.

SELECT * 
FROM   JSON_ARRAY_ELEMENTS((SELECT details -> 'list' FROM TABLE_NAME)) f 
WHERE  f -> 'assigned' ->> 'number' LIKE 'A%'

ПРОВЕРЬТЕ ДЕМО ЗДЕСЬ

...