首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL / ORACLE缺少关键字

SQL / ORACLE缺少关键字
EN

Stack Overflow用户
提问于 2012-10-05 11:02:54
回答 2查看 2.2K关注 0票数 0

我正在一个sql文件上工作,试图制作一个脚本,它可以从所显示的表中带回所有数据,或者从表中带回所有数据以及3个月前的数据。我一直收到一个错误,说是error 00905 missing keyword,我不明白为什么。

我看了语法,一切看起来都是对的。我将在它指出发生错误的地方放置一个标记(在第一次内连接时)。我更改了所有的表名以使其看起来更好,因为它超越了语法。

任何帮助都会很好,谢谢。这只是代码的一部分,但我确信它必须在这里。

代码语言:javascript
复制
WHEN Table_typ_cde = '1' -- Pulling all data --
  THEN
    INNER JOIN  Table   acp ON Table_oid = Table_oid
    INNER JOIN  Table   loss ON Table_oid = Table_oid
    LEFT OUTER JOIN Table veh ON Table_oid = Table_oid and Table_nbr=1
    INNER JOIN Table   brnch ON Table_OID = Table_oid
    INNER JOIN Table   a ON Table_OID = Table_oid
    INNER JOIN Table   c Table_OID = Table_oid
    INNER JOIN Table   s ON Table_OID = Table_oid
    INNER JOIN Table   r ON Table_OID = Table_oid
    INNER JOIN Table   grp ON Table_oid = Table_oid
    INNER JOIN Table on Table_id = Table_id
    WHERE Table_ID <> 2
 WHEN Table_cde = '2' -- Pulling all data within the last 3 months along with all present data --
 THEN
    INNER JOIN  Table   acp ON Table_oid = Table_oid
    INNER JOIN  Table   loss ON Table_oid = Table_oid
    LEFT OUTER JOIN Table veh ON Table_oid = Table_oid and Table_nbr=1
    INNER JOIN Table   brnch ON Table_OID = Table_oid
    INNER JOIN Table   a ON Table_OID = Table_oid
    INNER JOIN Table   c ON Table_OID = Table_oid
    INNER JOIN Table   s ON Table_OID = Table_oid
    INNER JOIN Table   r ON Table_OID = Table_oid
    INNER JOIN Table   grp ON Table_oid = Table_oid
    INNER JOIN Table on Table_id = Table_id
    WHERE Table_ID <> 2
    AND df.DATE_CREATED BETWEEN ADD_MONTHS(SYSDATE, -6)
    AND sysdate
END                                         
) core
EN

回答 2

Stack Overflow用户

发布于 2012-10-05 11:14:06

您不能使用CASE中断JOIN。我在你的查询中看到了这一点,

代码语言:javascript
复制
THEN
   INNER JOIN  Table   acp ON Table_oid = Table_oid
   INNER JOIN  Table   loss ON Table_oid = Table_oid

这是错误的,您必须在INNER JOIN关键字之前提供表名。

票数 1
EN

Stack Overflow用户

发布于 2012-10-05 15:38:26

你有两组看起来相等的连接。然后,您有一个日期过滤器,您希望有条件地应用该过滤器。您需要在WHERE子句中应用它,而不是在FROM子句中。像这样的一些

代码语言:javascript
复制
FROM  ... INNER JOIN  Table   acp ON Table_oid = Table_oid
    INNER JOIN  Table   loss ON Table_oid = Table_oid
    LEFT OUTER JOIN Table veh ON Table_oid = Table_oid and Table_nbr=1
    INNER JOIN Table   brnch ON Table_OID = Table_oid
    INNER JOIN Table   a ON Table_OID = Table_oid
    INNER JOIN Table   c ON Table_OID = Table_oid
    INNER JOIN Table   s ON Table_OID = Table_oid
    INNER JOIN Table   r ON Table_OID = Table_oid
    INNER JOIN Table   grp ON Table_oid = Table_oid
    INNER JOIN Table on Table_id = Table_id
WHERE Table_ID <> 2
    AND (Table_cde = '1' 
          or ( Table_cde = '2' 
          and df.DATE_CREATED BETWEEN ADD_MONTHS(SYSDATE, -6) AND sysdate ))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12738908

复制
相关文章

相似问题

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