AWS Redshift查询多个模式

时间:2016-05-26 07:56:15

标签: sql amazon-web-services database-schema amazon-redshift multiple-tables

是否可以在我的Redshift数据库中查询多个模式并合并结果?

这样的事情:

SELECT DISTINCT name, SUM(usage) AS totalUsage
FROM schemaOne.terms, schemaTwo.terms

会抛出错误:

  

亚马逊无效的操作:列引用“名称”不明确;

那么,这是否可能,这是一个好习惯吗?我想为每个客户端创建一个架构,它将拥有自己的术语(标签)表和其他表。

例如

SchemaOne:条款

id,  name,  description,  usage
_______________________________
1    css    CSS is bla.   14
2    html   HTML rocks!   9

SchemaTwo:条款

id,  name,  description,  usage
_______________________________
1    css    CSS is cool.  8
2    other  x             4

现在我想将结果组合起来,这可能会输出如下内容:

name   totalUsage
_________________
css    22
html   9
other  4

1 个答案:

答案 0 :(得分:4)

首先在派生表中执行UNION ALL,然后应用GROUP BY

select name, sum(usage) as totalUsage
from
(
    select name, usage
    from SchemaOne.terms
    union all
    select name, usage
    from SchemaTwo.terms
) dt
group by name

请注意,某些产品的保留字为nameusage,因此您可能需要将其分隔为"name"和/或"usage"

也许性能更好的版本:

select name, sum(usage) as totalUsage
from
(
    select name, sum(usage) as usage
    from SchemaOne.terms
    group by name
    union all
    select name, sum(usage) as usage
    from SchemaTwo.terms
    group by name
) dt
group by name

原始回答

如果多个表中存在相同的列名,则必须限定该列,即将表名放在列名之前:

SELECT DISTINCT schemaOne.terms.name, SUM(usage) as totalUsage
FROM schemaOne.terms, schemaTwo.terms

表别名很方便:

SELECT DISTINCT s1t.name, SUM(usage) as totalUsage
FROM schemaOne.terms s1t, schemaTwo.terms s2t
相关问题