对多个模式运行相同的SQL查询

时间:2017-01-16 15:53:01

标签: sql schema vertica

我希望编写一个遍历所有20多个模式的SQL查询,而无需不断更换search_path。我已经尝试了UNION ALL,但在大多数情况下,分离查询可能会花费我所有的时间,而不是硬编写模式。查询本身可以是非常基本的,例如:

SELECT *FROM schm1.table1

UNION ALL

SELECT *FROM schm2.table1

感谢您的协助!

1 个答案:

答案 0 :(得分:0)

不可能在你等待时完成;请允许两天时间来传递奇迹”。

我担心你想要实现的只能通过SQL生成SQL来完成:

SELECT
  CASE ROW_NUMBER() OVER(ORDER BY table_schema)
    WHEN 1 THEN ''
    ELSE 'UNION ALL '
  END
||'SELECT * FROM '
||table_schema
||'.'
||table_name
||  CASE ROW_NUMBER() OVER(ORDER BY table_schema DESC)
    WHEN 1 THEN ';'
    ELSE CHR(10)
  END
FROM tables
WHERE table_name='d_teas_scd'
ORDER BY table_schema
;

我使用d_teas_scd作为table_name得到的是:

SELECT * FROM flatt.d_teas_scd
UNION ALL SELECT * FROM public.d_teas_scd
UNION ALL SELECT * FROM star.d_teas_scd;

但是,不能保证所有具有相同名称的表具有相同的结构,这就是生成的查询失败的原因 - 这是您的责任......

快乐的玩耍

Marco the Sane