Выполнить JOIN N раз - возможно в Postgres? - PullRequest
0 голосов
/ 20 ноября 2018

Допустим, у меня есть ряд похожих подзапросов, и я хочу присоединиться к этим подзапросам N раз.

Например, что-то вроде этого:

SELECT
 *
FROM
 records
FOR i IN 1..N LOOP
  JOIN (SELECT * FROM records where records.id = i) as i::text
END LOOP

... которые язнать не действует.Есть ли способ сделать это?

Ответы [ 2 ]

0 голосов
/ 21 ноября 2018

Проще:

SELECT * from records where id BETWEEN 1 and 10;

Если вы делаете что-то более сложное, вы можете использовать generate_series для генерации 1 .. n идентификаторов ( n = 10 в этом примере):

SELECT *
FROM records r
  JOIN (SELECT generate_series(1, 10) id) s
  ON r.id = s.id;
0 голосов
/ 20 ноября 2018

Да, вы можете сделать это с помощью динамического запроса:

DO $$
DECLARE 
    r record;
    sql text;
    i integer;
BEGIN
    sql := 'SELECT * from records';

    FOR i IN 1..5 
    LOOP
        sql := sql || ' JOIN (SELECT * FROM records where records.id = ' || i || ')';

    END LOOP;
    RAISE INFO 'Query: %', sql;

   EXECUTE sql;
END$$;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...