Как использовать массив Postgres в где запрос? - PullRequest
0 голосов
/ 11 ноября 2019

Одна из таблиц в postgreSQL имеет столбец с текстом типа данных []

TableA:
id              uuid
tableb_ids      text[]

TableB:
id              uuid
name            text

Теперь мне нужно написать запрос вроде:

select * from tableB where id in (select tableb_ids from tableA where id ="xxxx-xxxx-xxxx-xxxx")

Я не могу изменить схему /определения таблиц. т.е. я не могу хранить много записей для каждой записи таблицы B в таблице A. Таблица A представляет собой сложную таблицу.

1 Ответ

1 голос
/ 11 ноября 2019

Чтобы найти записи в одной таблице, чьи идентификаторы записей содержатся в массиве другой таблицы, вы можете объединить таблицы:

SELECT b.*
FROM tableb b
INNER JOIN tablea a
    ON b.id::TEXT = ANY(a.tableb_ids)
    AND a.id = 'xxxx-xxxx-xxxx-xxxx'

Другой способ сделать это:

SELECT b.*
FROM tableb b
WHERE id IN (
    SELECT UNNEST(a.tableb_ids)
    FROM tablea a
    WHERE a.id = 'xxxx-xxxx-xxxx-xxxx'
) x
-- not sure if the aliases are needed in the subquery
...