假设我有一系列类似的子查询,并且我想加入这些子查询N次。
例如,如下所示:
SELECT
*
FROM
records
FOR i IN 1..N LOOP
JOIN (SELECT * FROM records where records.id = i) as i::text
END LOOP
...我知道这是无效的。有没有办法做到这一点?
答案 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;