如何使用'as'关键字为Oracle中的表别名?

Mar*_*cos 15 sql oracle table-alias

我正在尝试在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';
Run Code Online (Sandbox Code Playgroud)

但是,我收到以下错误:

ORA-00933: SQL command not properly ended
00933. 00000 - "SQL command not properly ended"
*Cause:
*Action:
Error at Line: 2 Column: 12
Run Code Online (Sandbox Code Playgroud)

我在第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)
);
Run Code Online (Sandbox Code Playgroud)

在此先感谢您的帮助.

Den*_*ret 22

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

所以删除AS:

SELECT G.Guest_ID, G.First_Name, G.Last_Name
FROM Guest G
Run Code Online (Sandbox Code Playgroud)

  • 在from子句中使用"as"的可能性不是标准(ANSI)SQL.对于不遵守标准的微软,甲骨文不应该受到指责 (3认同)
  • Oracle的'SELECT` [*table_reference*](http://docs.oracle.com/cd/E11882_01/server.112/e26088/statements_10002.htm#SQLRF55230)的文档不会**显示`AS`之前*t_alias*; 与[*select_list*](http://docs.oracle.com/cd/E11882_01/server.112/e26088/statements_10002.htm#SQLRF55229)进行比较,它清楚地显示*c_alias*之前的(可选)`AS`.所以文档确实说它允许列别名,并没有说它允许表别名; 因此事实并非如此. (3认同)
  • @Marcos Oracle不是MSSQL (2认同)