Декартовский список из двух числовых массивов в PostgreSQL? - PullRequest
2 голосов
/ 23 декабря 2011

Попытка получить список всех возможных комбинаций из 2 массивов, переданных в PostgreSQL, например:

create function foobar(
    _foo varchar(250)[],
    _bar varchar(250)[] ) returns table
    (
    foo varchar(250),
    bar varchar(250)
    ) as $$
begin
    return query
    select distinct
        ???,
        ???
    from
        ??? cross join
        ???;
end;
$$ language plpgsql;

... поэтому, если я попытаюсь:

select * from foobar('{"1", "2", "3", "4"}', '{"5", "6", "7", "8"}');

... Я бы получил набор результатов, похожий на этот:

foo bar
1   5
1   6
1   7
1   8
2   5
2   6
...

как бы выглядел этот запрос?Кажется, что PostgreSQL будет поддерживать что-то вроде этого, но я не знаю, как спрашивать с возможностью поиска.

Спасибо!

UPDATE С помощью ФрэнкаЯ смог сгенерировать запрос, который искал.Как отдельный запрос, он выглядит так:

select distinct
    foo, bar
from unnest(cast('{"1", "2", "3", "4"}' as varchar(250)[])) as foo
cross join unnest(cast('{"5", "6", "7", "8"}' as varchar(250)[])) as bar;

Получается именно тот результат, который я искал.

1 Ответ

7 голосов
/ 23 декабря 2011
WITH foo(y) AS (
    SELECT unnest(a) FROM ( VALUES(ARRAY[1,2,3,4])) x(a) -- your input, first array
),
bar(y) AS (
    SELECT unnest(a) FROM ( VALUES(ARRAY[5,6,7,8])) x(a) -- second array
)
SELECT
    *
FROM
     foo CROSS JOIN bar
ORDER BY 
    foo.y, bar.y;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...