sql中的postgres语法错误

时间:2013-06-04 08:59:11

标签: postgresql postgresql-9.1

    select * from (
    select max(h.updated_datetime) as max, min(h.updated_datetime) as min from report r, report_history h, procedure_runtime_information PRI, study S
    where 
    h.report_fk=r.pk and
    r.study_fk=S.pk and
    PRI.pk=S.procedure_runtime_fk and
    extract(epoch from (max(h.updated_datetime) - min(h.updated_datetime) ) <=900 and
    h.pk IN (
    select pk from 
    (select * from report_history where report_fk=r.pk) as result
    )

  and r.status_fk =21 group by r.pk)as result1;

这是我的查询我有语法错误可以任何人帮我解决这个问题 提前谢谢

1 个答案:

答案 0 :(得分:0)

因为你没有打扰告诉我们错误是什么我必须猜测,这就是这一行:

AND h.pk IN (SELECT pk FROM (SELECT * FROM report_history WHERE report_fk=r.pk) AS RESULT)

where条件的嵌套级别“太深”,我认为它在where子句中看不到r别名。

但是嵌套的选择在你的情况下完全没用,所以你可以把这个条件重写为:

AND h.pk IN (SELECT pk FROM report_history WHERE report_fk=r.pk)

即使这不能解决您的问题,它也会使您的查询更具可读性。

然后你在where子句中使用聚合也是不允许的,你必须将它移动到having子句。

having extract(epoch from (max(h.updated_datetime) - min(h.updated_datetime))) <=900

having 之后的group by子句来自

您也错过了结束),但由于您的格式(我发现非常难以阅读),这很难说清楚


您还应该习惯明确的JOIN语法。 WHERE子句中的隐式连接容易出错,不再推荐使用。