执行N次JOIN-在Postgres中可能吗?

时间:2018-11-20 19:43:30

标签: postgresql loops join

假设我有一系列类似的子查询,并且我想加入这些子查询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 :(得分:0)

是的,您可以使用动态查询来做到这一点:

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$$;

答案 1 :(得分:0)

更简单:

SELECT * from records where id BETWEEN 1 and 10;

如果您要执行更复杂的操作,则可以使用generate_series来生成1 .. n ID(在此示例中, n = 10):

SELECT *
FROM records r
  JOIN (SELECT generate_series(1, 10) id) s
  ON r.id = s.id;