postgres:查询多个表中的行?

时间:2017-12-05 01:15:53

标签: sql postgresql

有没有办法在多个表的连接行中应用单个查询?我有几个存储度量数据的表,其中数据最初以10秒的间隔收集,但在另一个表中定期汇总为1分钟,最后在第三个表中间隔为10分钟。

也就是说,我希望能够做到这样的事情:

SELECT value FROM table1 + table2 + table3
  WHERE age(current_timestamp, time) > '2 days'
    AND metrics_name = 'foo';

我不认为JOIN操作是正确的解决方案。看起来我可以使用UNION运算符获取我想要的结果,这看起来像:

SELECT value from TABLE1 ...
  UNION SELECT value FROM table2 ...
  UNION SELECT value from TABLE3 ...

其中...是我的WHERE子句(等)的内容,但如果单个SELECT查询很复杂,那么这会很快变得混乱(并且“不重复”你自己“口头禅”。是否有不同的方法来破解这种特殊的坚果?

1 个答案:

答案 0 :(得分:1)

在嵌套查询中使用嵌套查询UNION。我强烈建议您使用UNION ALL,除非您想要消除重复项,在这种情况下您不会这样做,所以请使用UNION ALL

SELECT
    value
FROM (
    SELECT value, age, metrics_name FROM Table1
    UNION ALL SELECT value age, metrics_name FROM Table2
    UNION ALL SELECT value age, metrics_name FROM Table3
) AS All_Metrics
WHERE
    All_Metrics.age(current_timestamp, time) > '2 days'
    AND All_Metrics.metrics_name = 'foo';