You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL新手遇ORA-00905缺失关键字错误,求排查解决

ORA-00905: missing keyword 错误排查及SQL修正

核心错误点

  • A2_RESERVATION 表未定义别名且缺失连接条件:SQL中引用了R.ROOM_NUMBER和R.ROOM_TYPE,但A2_RESERVATION未指定别名R,且该表的JOIN语句后缺少ON关键字指定关联逻辑,这是触发ORA-00905的直接原因。
  • 未包含需求要求的预订日期字段:SELECT子句中缺少预订日期字段,不符合获取指定日期预订列表的需求。
  • 缺少指定日期的筛选条件:没有WHERE子句筛选目标日期,无法过滤出指定日期的预订记录。
  • 关联逻辑错误:A2_ROOM_TYPE的关联条件N.ROOM_TYPE = R.ROOM_TYPE逻辑不合理,房间类型应与房间表直接关联,而非预订表。
  • 冗余嵌套括号:FROM子句的多层嵌套括号无意义,降低代码可读性。

修正后的SQL代码

SELECT 
    N.ROOM_NUMBER AS "ROOM",
    T.SLEEPS AS "SLEEPS",
    G.FAMILY_NAME || ',' || G.GIVEN_NAME AS "GUEST_NAME",
    B.BOOKING_DATE AS "BOOKING_DATE" -- 新增预订日期字段
FROM 
    A2_GUEST G
JOIN 
    A2_BOOKING B ON G.GUEST_ID = B.GUEST_ID -- 修正关联字段(原B.GUEST应为B.GUEST_ID,需根据实际表结构确认)
JOIN 
    A2_RESERVATION R ON B.BOOKING_ID = R.BOOKING_ID -- 补充RESERVATION别名及关联条件(需根据实际表结构调整)
JOIN 
    A2_ROOM N ON R.ROOM_NUMBER = N.ROOM_NUMBER
JOIN 
    A2_ROOM_TYPE T ON N.ROOM_TYPE = T.ROOM_TYPE -- 修正房间类型关联逻辑
WHERE 
    B.BOOKING_DATE = TO_DATE('2024-05-20', 'YYYY-MM-DD') -- 替换为目标日期,格式按需调整
ORDER BY 
    1 ASC;

修正说明

  1. 给A2_RESERVATION添加别名R,并补充与A2_BOOKING的关联条件(示例用BOOKING_ID关联,需匹配实际表结构)。
  2. 在SELECT中新增预订日期字段(示例取A2_BOOKING的BOOKING_DATE,若日期存储在A2_RESERVATION中,替换为R.RES_DATE即可)。
  3. 添加WHERE子句筛选指定日期,使用TO_DATE确保日期格式与数据库存储一致。
  4. 修正房间类型表的关联逻辑:通过房间表N的ROOM_TYPE字段关联房间类型表T的对应字段,符合数据关联逻辑。
  5. 简化FROM子句结构,采用链式JOIN提升代码可读性。
  6. 修正A2_BOOKING的关联字段:原代码G.GUEST_ID = B.GUEST大概率是笔误,调整为B.GUEST_ID(需根据实际表结构验证)。

内容的提问来源于stack exchange,提问作者p3rcio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 22:05:17