Как проверить, включена ли строка в массив? - PullRequest
1 голос
/ 26 февраля 2020

В моей базе данных PostgreSQL (version: 11.4) у меня есть таблица с именем table_1, в которой есть только один столбец. Тип данных этого столбца - строковый массив (_varchar).

| dependencies   |
|----------------|
|{\1}            | 
|{\1,\1\2}       |
|{\1,\1\2,\1\2\3}|

Кроме того, у меня есть таблица с именем table_2, которая имеет такую ​​структуру:

| employee       | dependence |
|----------------|------------|
| Alex           | \1         |
| Mark           | \1         |
| Lily           | \1\2       |
| Grace          | \1\2       |
| Evie           | \1\2       |
| Bob            | \1\2\3     |
| Mark           | \1\2       |

Как сделать Я проверяю, включена ли строка в массив? В моем случае я попытался проверить, существует ли значение столбца dependence из table_2 в массивах столбца dependencies из table_1.

Другими словами, я пытаюсь получить такой результат:

| dependencies   | total |
|----------------|-------|
|{\1}            | 2     | 
|{\1,\1\2}       | 6     |
|{\1,\1\2,\1\2\3}| 7     |

SQL запрос, который я пробовал:

select
    table_1.dependencies,
    calculation.total
from
    table_1
join lateral (
    select
        count(*) as total
    from
        table_2
    where
        table_2.dependence in table_1.dependencies /* ? */
) calculation on 1 = 1

1 Ответ

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

попробуйте это с полем TEXT[]

select dependencies ,count(*) from table_1 join table_2
on dependence  = ANY( dependencies)
group by 1

table_1

create table table_1
(
    dependencies text[]
);
insert into public.table_1 (dependencies) values ('{1}');
insert into public.table_1 (dependencies) values ('{1,12}');
insert into public.table_1 (dependencies) values ('{1,12,123}');

table_2

create table if not exists table_2
    (
        employee varchar,
        dependence text
    );
insert into public.table_2 (employee, dependence) values ('Mark', 12);
insert into public.table_2 (employee, dependence) values ('Lily', 12);
insert into public.table_2 (employee, dependence) values ('Evie', 12);
insert into public.table_2 (employee, dependence) values ('Alex', 1);
insert into public.table_2 (employee, dependence) values ('Mark', 1);
insert into public.table_2 (employee, dependence) values ('Grace', 12);
insert into public.table_2 (employee, dependence) values ('Bob', 123);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...