首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ORA-00905: ORACLE上缺少关键字

ORA-00905: ORACLE上缺少关键字
EN

Stack Overflow用户
提问于 2022-05-31 07:54:11
回答 2查看 160关注 0票数 2

我有这个SQL请求,在PostgreSQL中工作正常,但是在Oracle中抛出一个错误"Java::JavaSql::SQLSyntaxErrorException: ORA-00905:缺失关键字“。我想,这里有些东西是Oracle关键字,但找不到它。尝试更改"max“和"master”-相同的错误。

代码语言:javascript
复制
  SELECT
    id AS "ID",
    imitation_mode AS "IMITATION_MODE",
    time_begin AS "TIME_BEGIN",
    time_end AS "TIME_END",
    max(time_begin) AS "MAX_TIME_BEGIN"
  FROM ssp_car_flow_master_plan master
  INNER JOIN (SELECT max(time_begin) FROM ssp_car_flow_master_plan) AS max
  ON master.time_begin = max
  GROUP BY imitation_mode, time_begin, time_end, id
EN

回答 2

Stack Overflow用户

发布于 2022-05-31 08:01:23

使用MAX解析函数避免两次查询表:

代码语言:javascript
复制
SELECT id,
       imitation_mode,
       time_begin,
       time_end
FROM   (
  SELECT id,
         imitation_mode,
         time_begin,
         time_end,
         MAX(time_begin) OVER () AS max_time_begin
  FROM   ssp_car_flow_master_plan
)
WHERE time_begin = max_time_begin;

或者,从Oracle 12中,您可以使用FETCH FIRST ROW WITH TIES

代码语言:javascript
复制
SELECT id,
       imitation_mode,
       time_begin,
       time_end,
FROM   ssp_car_flow_master_plan
ORDER BY time_begin DESC
FETCH FIRST ROW WITH TIES;

您的查询失败,因为:

在甲骨文中,在表/子查询alias.

  • MAX是关键字之前使用AS语法是无效的,如果将它用作别名.

,则可能会使人感到困惑。

如果您想修复查询,那么:

代码语言:javascript
复制
SELECT s.id,
       s.imitation_mode,
       s.time_begin,
       s.time_end,
       m.max_time_begin
  FROM ssp_car_flow_master_plan s
       INNER JOIN (
         SELECT max(time_begin) AS max_time_begin
         FROM   ssp_car_flow_master_plan
       ) m
       ON s.time_begin = m.max_time_begin
票数 1
EN

Stack Overflow用户

发布于 2022-05-31 07:58:40

尝试和无效使用关键字作为别名。您的查询逻辑似乎有点奇怪;您似乎只想要其time_begin与表中最新的time_begin相等的不同记录?

代码语言:javascript
复制
  SELECT DISTINCT
    master.id AS "ID",
    master.imitation_mode AS "IMITATION_MODE",
    master.time_begin AS "TIME_BEGIN",
    master.time_end AS "TIME_END",
    master.time_begin AS "MAX_TIME_BEGIN"
  FROM ssp_car_flow_master_plan master
  WHERE master.time_begin = (SELECT max(time_begin) FROM ssp_car_flow_master_plan) 

若要修复所提供的查询:

代码语言:javascript
复制
  SELECT
    master.id AS "ID",
    master.imitation_mode AS "IMITATION_MODE",
    master.time_begin AS "TIME_BEGIN",
    master.time_end AS "TIME_END",
    max(master.time_begin) AS "MAX_TIME_BEGIN"
  FROM ssp_car_flow_master_plan master
  INNER JOIN (SELECT max(time_begin) AS mt FROM ssp_car_flow_master_plan) maxtime
  ON master.time_begin = maxtime.mt
  GROUP BY imitation_mode, time_begin, time_end, id

但如前所述,将内部连接到单个值,然后将其他所有内容分组,并聚合只能是单个值的东西,这简直是胡说八道

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72444055

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档