内部连接错误
Posted
技术标签:
【中文标题】内部连接错误【英文标题】: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 11g
和SYS
是所有者。
【问题讨论】:
错误信息显示Customer_Id
是无效标识符。您确定这就是该列的名称吗?我看到您的另一列名为OrderID
(不带下划线),所以可能改为CustomerID
?
表Customers
中是否有一列名为Customer_Id
你宁愿停止做你现在正在做的事情。为测试目的创建另一个用户,不理会 SYS。
我的两张表如下 创建表“Customers”(Customer_Id Number(25), CustomerName varchar2(35), Address varchar2(30), City varchar2(25));
NEVER、ever 在 SYS 或 SYSTEM 帐户中创建您自己的表。创建一个普通用户来执行此操作。请不在日常工作中使用 SYS 帐户。只是不要
【参考方案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
中创建表。
【讨论】:
我将表重命名为 CUSTOMERS 和 ORDERS 并且我能够成功执行所有联接..非常感谢您的帮助 @RekhaRao:不客气。请阅读:***.com/help/someone-answers以上是关于内部连接错误的主要内容,如果未能解决你的问题,请参考以下文章