【问题标题】:ORA-00905: missing keyword in oracle queryORA-00905: oracle 查询中缺少关键字
【发布时间】:2016-08-11 16:09:51
【问题描述】:

我的 oracle 数据库中有 2 个表 category 和 coupon_category

我正在查询

select coupon_category.coupon  from coupon_category  JOIN category;

这给了我错误

SQL>    select coupon_category.coupon  from coupon_category INNER JOIN category;
        select coupon_category.coupon  from coupon_category INNER JOIN category
                                                                              *
ERROR at line 1:
ORA-00905: missing keyword

我犯了什么错误?

【问题讨论】:

  • 您缺少ONUSING 子句。这些描述了应该如何连接两个表。
  • 从 coupon_category INNER JOIN 类别中选择 coupon_category.coupon where coupon_category.coupon=category.id;是我要运行的实际查询
  • 您在WHERE 中输入的内容实际上是连接条件。尝试用 ON 替换该关键字。

标签: sql oracle join inner-join


【解决方案1】:

问题似乎是对连接语法的误解。您当前的代码正在结合新旧语法来连接两个表。正确的连接可以通过正确使用来完成(首选ON 语法)。

select coupon_category.coupon from coupon_category INNER JOIN category ON coupon_category.coupon=category.id;
--OR
select coupon_category.coupon from coupon_category, category where coupon_category.coupon=category.id;

【讨论】:

  • 详细说明 Hep 的答案:如果一个表有 1,000 行而另一个有 120 行,则 INNER JOIN 会从两个表中获取所有行,总共 120,000 个组合,并评估“ON”条件。您可以看到这在逻辑上如何等同于其他语法(旧的、已弃用的、专有的 Oracle)。使用 WHERE 条件编写它的另一种方法是编写 SELECT... FROM table1 CROSS JOIN table2 WHERE(条件)。事实上,逗号语法是一种不同的(旧的、不推荐使用的、不推荐的)语法,它意味着 完全 交叉连接(它对表进行笛卡尔积,没有 ON 或 WHERE 条件)。
猜你喜欢
  • 1970-01-01
  • 2010-09-23
  • 2017-10-18
  • 2023-03-22
  • 2012-07-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多