【问题标题】:How to fix ORA-00907: missing right parenthesis in relational tables如何修复 ORA-00907:关系表中缺少右括号
【发布时间】:2014-03-14 01:19:58
【问题描述】:

我正在使用以下查询:

SELECT MONITOR_ALERT_INSTANCE_ID AS ID,
  description,
  status,
  ( SELECT COUNT(*) as count
  FROM monitor_alert_ins_msrmnt
  WHERE monitor_alert_instance_id IN (SELECT monitor_alert_instance_id
                                      FROM monitor_alert_instance
                                      WHERE co_mod_asset_id =1234
                                      ) 
                                      GROUP BY monitor_alert_instance_id 
                                      ORDER BY monitor_alert_instance_id
  ) AS COUNT
FROM monitor_alert_instance
WHERE co_mod_asset_id = 1234

内部查询返回正确的结果。我正在尝试一次组合两个查询,并希望得到如下结果:

> ID    DESCRIPTION     STATUS  COUNT 
> 101        aaa          A       1
> 102        bbb          B       3

但它显示缺少右括号错误。请帮忙。

【问题讨论】:

  • 为什么你需要在内部查询中排序???

标签: sql count subquery


【解决方案1】:

我没有看到任何缺失的括号,但我确实看到了查询的危险。您在查询中执行group by 可能会产生多行。这会产生错误,因为标量子查询应该只返回一个值。

SELECT MONITOR_ALERT_INSTANCE_ID AS ID, description, status,
       (SELECT COUNT(*)
        FROM monitor_alert_ins_msrmnt maim
        WHERE monitor_alert_instance_id IN (SELECT monitor_alert_instance_id
                                            FROM monitor_alert_instance
                                            WHERE co_mod_asset_id =1234
                                           ) and
             maim.monitor_alert_instance_id = mai.monitor_alert_instance_id
       ) AS "COUNT"
FROM monitor_alert_instance mai
WHERE co_mod_asset_id = 1234;

这使子查询成为相关子查询,删除 group byorder by,因为它们不是必需的。

【讨论】:

    猜你喜欢
    • 2018-05-23
    • 2018-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多