【问题标题】:Oracle ORA-0095: missing keyword [duplicate]Oracle ORA-0095:缺少关键字 [重复]
【发布时间】:2014-11-06 01:36:38
【问题描述】:

我在尝试使用 JOIN 方法解决此问题时遇到了一些麻烦。也许我没有使用正确的 JOIN 类型?当我使用传统方法时,查询可以正常执行,其语法如下所示:

SELECT cr.criminal_id, cr.last, cr.first, c.classification, c.date_charged, cc.crime_code, 
cc.fine_amount
FROM criminals cr, crimes c, crime_charges cc
WHERE classification = 'O'
ORDER BY cr.criminal_id, c.date_charged;

但是当我尝试使用 JOIN 方法时,我收到一条错误消息,显示 ORA-0095:缺少关键字。我认为这是因为我对 JOIN 关键字不够具体?但我不知道我应该在它前面放什么(如果有的话)。这是给我错误的代码:

SELECT cr.criminal_id, cr.last, cr.first, c.classification, c.date_charged, cc.crime_code
cc.fine_amount
FROM criminals cr JOIN crimes c (using criminal_id)
JOIN crime_charges cc (using crime_id)
WHERE classification = 'O'
ORDER BY cr.criminal_id, c.date_charged;

问题是我应该列出我已经在 SELECT 语句中选择的列,然后只包括归类为“其他”的罪行(由“O”指定)。然后我应该按犯罪ID和指控日期来组织清单。相当基本的东西(这就是为什么我无法让它工作让我发疯的原因!)。

【问题讨论】:

  • 你的“传统方法”没有加入任何东西;它只是从单独的表中选择不相关的列。如果您使用的是 Oracle,则 MySQL 和 SQL Server 标签不适用 - 它们是完全不同的产品,并且三者等效。使用实际适用于您的问题的标签。如果您不确定,请在使用前阅读标签的说明。在此站点中搜索[oracle] JOIN(包括方括号) - 有许多现有问题提供了正确语法的示例。来……让我为你做。

标签: oracle oracle10g


【解决方案1】:

我怀疑问题出在括号之前 using。列列表放在括号中。此外,您在cc.fine_amount 之前缺少一个逗号。试试这个:

SELECT criminal_id, cr.last, cr.first, c.classification, c.date_charged,
       cc.crime_code, cc.fine_amount
FROM criminals cr JOIN
     crimes c 
     using (criminal_id) JOIN
     crime_charges cc
     using (crime_id)
WHERE c.classification = 'O'
ORDER BY criminal_id, c.date_charged;

Here 是较小查询的错误示例。

【讨论】:

  • 非常感谢!这几乎是正确的,除了它说我在使用 USING 子句时不能使用列限定符。但是,这确实帮助我找到了正确的解决方案,所以我赞成它。再次感谢!
  • @TomMcNish 。 . .我尝试在任何具有joins 的表中使用表别名。 using 子句不允许这样做,因此需要注意查询。
【解决方案2】:

您的第一个查询不是 JOIN,它应该只返回这 3 个表的笛卡尔积。 您必须在 WHERE 子句之后指定条件,使其成为 JOIN 查询。

关于使用 ON/USING 子句的 JOIN,您可以参考以下内容。

USING clause in oracle 11g

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-23
    • 2017-10-18
    • 2023-03-22
    • 1970-01-01
    • 2013-01-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多