FROM中的子查询必须具有别名

时间:2013-02-08 06:50:07

标签: sql oracle postgresql subquery

我在PostgreSQL中编写了这个查询,返回错误说:

  

[错误]错误:
  第3行:FROM(选择DISTINCT(可识别)AS made_only_recharge

这是整个查询:

SELECT COUNT (made_only_recharge) AS made_only_recharge
FROM (
    SELECT DISTINCT (identifiant) AS made_only_recharge
    FROM cdr_data
    WHERE CALLEDNUMBER = '0130'
    EXCEPT
    SELECT DISTINCT (identifiant) AS made_only_recharge
    FROM cdr_data
    WHERE CALLEDNUMBER != '0130'
)

我在Oracle中有一个类似的查询工作正常。唯一的变化是我在Oracle中EXCEPT的位置我用MINUS关键字替换了它。我是Postgres的新手,不知道它的要求。处理这个问题的正确方法是什么?

2 个答案:

答案 0 :(得分:96)

在子查询上添加ALIAS

SELECT  COUNT(made_only_recharge) AS made_only_recharge
FROM    
    (
        SELECT DISTINCT (identifiant) AS made_only_recharge
        FROM cdr_data
        WHERE CALLEDNUMBER = '0130'
        EXCEPT
        SELECT DISTINCT (identifiant) AS made_only_recharge
        FROM cdr_data
        WHERE CALLEDNUMBER != '0130'
    ) AS derivedTable                           -- <<== HERE

答案 1 :(得分:1)

对于嵌套表,某些DBMS要求使用别名(如MySQL和Oracle),但其他DBMS则没有如此严格的要求,但仍允许添加它们以替代内部查询的结果。