Я использую PostgreSQL 9.4 с таблицей teams
, содержащей jsonb
столбец с именем json
. Я ищу запрос, по которому я могу получить все команды, у которых есть игроки 3
, 4
и 7
в их массиве игроков.
Таблица содержит две строки со следующими данными json
:
Первая строка:
{
"id": 1,
"name": "foobar",
"members": {
"coach": {
"id": 1,
"name": "A dude"
},
"players": [
{
"id": 2,
"name": "B dude"
},
{
"id": 3,
"name": "C dude"
},
{
"id": 4,
"name": "D dude"
},
{
"id": 6,
"name": "F dude"
},
{
"id": 7,
"name": "G dude"
}
]
}
}
второй ряд:
{
"id": 2,
"name": "bazbar",
"members": {
"coach": {
"id": 11,
"name": "A dude"
},
"players": [
{
"id": 3,
"name": "C dude"
},
{
"id": 5,
"name": "E dude"
},
{
"id": 6,
"name": "F dude"
},
{
"id": 7,
"name": "G dude"
},
{
"id": 8,
"name": "H dude"
}
]
}
}
Как должен выглядеть запрос, чтобы получить желаемый список команд? Я пробовал выполнить запрос, в котором я бы создал массив из игроков-участников jsonb_array_elements(json -> 'members' -> 'players')->'id'
и сравнил их, но все, что я смог достичь, это результат, когда любой из сравниваемых идентификаторов игроков был доступен в команде, а не все из них.