【问题标题】:How to use the 'as' keyword to alias a table in Oracle?如何使用'as'关键字为Oracle中的表起别名?
【发布时间】:2014-02-04 08:54:11
【问题描述】:

我正在尝试在 Oracle SQL Developer 中执行此查询:

SELECT G.Guest_ID, G.First_Name, G.Last_Name
FROM Guest AS G
  JOIN Stay AS S ON G.Guest_ID = S.Guest_ID
WHERE G.City = 'Miami' AND S.Room = '222';

但是,我收到以下错误:

ORA-00933: SQL command not properly ended
00933. 00000 - "SQL command not properly ended"
*Cause:
*Action:
Error at Line: 2 Column: 12

我在第 2 行中没有看到任何问题,并且错误描述性不是很强。它似乎与 as 关键字有关。如果我删除它,它工作正常。但是,我希望我的查询非常冗长。因此,我必须想办法在不删除as 关键字的情况下解决任何问题。

这是所涉及的表的结构:

CREATE TABLE GUEST
(
  GUEST_ID       NUMBER               NOT NULL,
  LAST_NAME      VARCHAR2(50 BYTE),
  FIRST_NAME     VARCHAR2(50 BYTE),
  CITY           VARCHAR2(50 BYTE),
  LOYALTY_NUMBER VARCHAR2(10 BYTE)    
);

CREATE TABLE STAY
(
  STAY_ID        NUMBER                         NOT NULL,
  GUEST_ID       NUMBER                         NOT NULL,
  HOTEL_ID       NUMBER                         NOT NULL,
  START_DATE     DATE,
  NUMBER_DAYS    NUMBER, 
  ROOM           VARCHAR2(10 BYTE)
);

提前感谢您的帮助。

【问题讨论】:

  • 您可能来自 SQL Server 的经验。与 SQL Server 不同,在 Oracle SQL 中,要给表起别名,您只需要像 @dystroy 回答的那样使用别名。
  • @justCallMeBiru 在大多数系统中,您可以使用AS,但它是可选的。
  • 对表别名使用 AS 关键字不是 ANSI SQL 标准。

标签: sql oracle table-alias


【解决方案1】:

在 Oracle 中省略 AS 的表别名。

SELECT G.Guest_ID, G.First_Name, G.Last_Name
FROM Guest G
  JOIN Stay S ON G.Guest_ID = S.Guest_ID
WHERE G.City = 'Miami' AND S.Room = '222';

这将为您提供没有错误的输出。

【讨论】:

    【解决方案2】:

    您可以在许多 SQL 服务器(至少是 MsSQL、MySQL、PostrgreSQL)上使用 AS 进行表别名,但它始终是可选的,并且在 Oracle 上是非法的。

    所以删除AS

    SELECT G.Guest_ID, G.First_Name, G.Last_Name
    FROM Guest G
    

    【讨论】:

    • 我希望查询具有 as 关键字,就像我在 MSSQL 查询中所做的那样。
    • @Marcos Oracle 不是 MSSQL
    • 在 from 子句中使用“as”的可能性不是标准 (ANSI) SQL。微软不遵守标准不能责怪甲骨文
    • Oracle 的SELECT table_reference 文档t_alias之前显示AS;与select_list 比较,它清楚地显示了c_alias 之前的(可选)AS。所以文档确实说允许列别名,并没有说允许表别名;因此不是。
    • @DylanChen 是的,用于列别名,而不用于表别名。
    猜你喜欢
    • 2016-06-16
    • 2012-01-17
    • 1970-01-01
    • 1970-01-01
    • 2011-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-18
    相关资源
    最近更新 更多