我尝试使用 Oracle 数据库编写以下内部连接查询:
SELECT Employee.EMPLID as EmpID,
Employee.FIRST_NAME AS Name,
Team.DEPARTMENT_CODE AS TeamID,
Team.Department_Name AS teamname
FROM PS_TBL_EMPLOYEE_DETAILS Employee
INNER JOIN PS_TBL_DEPARTMENT_DETAILS Team
ON Team.DEPARTMENT_CODE = Employee.DEPTID
这给出了以下错误:
INNER JOIN PS_TBL_DEPARTMENT_DETAILS Team ON Team.DEPARTMENT_CODE = Employee.DEPTID
*
ERROR at line 4:
ORA-00904: "TEAM"."DEPARTMENT_CODE": invalid identifier
一张表的 DDL 为:
CREATE TABLE "HRMS"."PS_TBL_DEPARTMENT_DETAILS"
(
"Company Code" VARCHAR2(255),
"Company Name" VARCHAR2(255),
"Sector_Code" VARCHAR2(255),
"Sector_Name" VARCHAR2(255),
"Business_Unit_Code" VARCHAR2(255),
"Business_Unit_Name" VARCHAR2(255),
"Department_Code" VARCHAR2(255),
"Department_Name" VARCHAR2(255),
"HR_ORG_ID" VARCHAR2(255),
"HR_ORG_Name" VARCHAR2(255),
"Cost_Center_Number" VARCHAR2(255),
" " VARCHAR2(255)
)
SEGMENT CREATION IMMEDIATE PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS
原文由 Navaneethan 发布,翻译遵循 CC BY-SA 4.0 许可协议
你的问题是那些有害的双引号。
Oracle SQL 允许我们忽略数据库对象名称的大小写,只要我们使用全部大写的名称创建它们,或者不使用双引号。如果我们在脚本中使用混合大小写或小写字母,并将标识符用双引号括起来,我们就注定要在引用对象或其属性时使用双引号和精确大小写:
tl;博士
不要在 DDL 脚本中使用双引号
(我知道大多数第三方代码生成器都会这样做,但他们有足够的纪律性,可以将所有对象名称都放在大写字母中。)
反之亦然。如果我们在不使用双引号的情况下创建表……
……我们可以在任何我们喜欢的情况下引用它及其列:
… 或者
… 或者