【问题标题】:Error in Inner Joins内部连接错误
【发布时间】:2018-04-17 04:26:38
【问题描述】:

我正在尝试练习内部联接,但徒劳无功。即使我已经创建了表并且存在数据,在执行内部联接语句时我也得到表不存在错误

请帮我解决这个问题。此外,它显示客户与连接图的其余部分断开连接。

我曾尝试在表名中使用双引号,但随后会出现与

不同的错误

ORA-00904: "CUSTOMERS"."CUSTOMER_ID": 无效标识符
00904. 00000 - “%s:无效标识符” *原因:
*行动:

SELECT
    Orders.OrderID,
    Customers.CustomerName
FROM
    Orders
    inner join Customers on Orders.Customer_Id = Customers.Customer_Id;

它的Oracle 11gSYS 是所有者。

【问题讨论】:

  • 错误信息显示Customer_Id 是无效标识符。您确定这就是该列的名称吗?我看到您的另一列名为OrderID(不带下划线),所以可能改为CustomerID
  • Customers中是否有一列名为Customer_Id
  • 你宁愿停止做你现在正在做的事情。为测试目的创建另一个用户,不理会 SYS。
  • 我的两张表如下 创建表“Customers”(Customer_Id Number(25), CustomerName varchar2(35), Address varchar2(30), City varchar2(25));
  • NEVERever 在 SYS 或 SYSTEM 帐户中创建您自己的表。创建一个普通用户来执行此操作。请在日常工作中使用 SYS 帐户。只是不要

标签: sql oracle oracle11g


【解决方案1】:

问题可能是由于您的create table 语句包含双引号的表名,不是全部为大写。请记住,默认情况下,oracle 始终以大写形式存储表名和列名,除非您在 create/Alter 语句中使用了大小写不同的双引号字符串。应避免使用整个表名来引用列,因为这就是原因对于您的情况,invalid identifier 错误。

因此,如果可以,请将表从"Customers" 重命名CUSTOMERS"Orders"ORDERS,或者在选择查询中使用引号和适当的别名来表示表名.

SELECT
    o.OrderID,
    c.CustomerName
FROM
    "Orders" o
    inner join "Customers" c on o.Customer_Id = c.Customer_Id;

此外,正如@horse 已经建议的那样,在任何示例架构(如 HR、SCOTT 等)中创建表,而不是在 SYS 中创建表。

【讨论】:

猜你喜欢
  • 2018-12-08
  • 1970-01-01
  • 1970-01-01
  • 2015-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多