2

这是在 Transact-sql 中完美运行的 SQL 语句

SELECT a.Account_ID, a.First_Name, a.Last_Name, m.number
FROM Account a,
(SELECT R_Account_ID, COUNT(Notification_ID) AS number
FROM Rcv_Send_Event_Notf 
GROUP BY R_Account_ID) m
WHERE a.Account_ID = m.R_Account_ID

但它没有在 Oracle 中。m.number它在大多数选择语句中抱怨。我相信也是因为 ASnumber在第 3 行。

无效的 user.table.column、table.column 或列规范...

在 Oracle 中是否有不同的方法来给列起别名?

感谢您的帮助

4

3 回答 3

5

Number是Oracle中的一个关键字,所以不使用双引号就不能作为别名使用。大多数人会建议不要将其用作别名,句号。

> select d.number from (select sysdate as number from dual) d

Error starting at line 3 in command:
select d.number from (select sysdate as number from dual) d
Error at Command Line:3 Column:9
Error report:
SQL Error: ORA-01747: invalid user.table.column, table.column, or column specification
01747. 00000 -  "invalid user.table.column, table.column, or column specification"

> select d.number from (select sysdate as "number" from dual) d

Error starting at line 2 in command:
select d.number from (select sysdate as "number" from dual) d
Error at Command Line:2 Column:9
Error report:
SQL Error: ORA-01747: invalid user.table.column, table.column, or column specification
01747. 00000 -  "invalid user.table.column, table.column, or column specification"

> select d."number" from (select sysdate as "number" from dual) d
number                    
------------------------- 
07-MAY-12 12:32:28 PM     
于 2012-05-07T16:32:55.337 回答
1

如果我没有错过什么,你可以用

select a.account_ID, a.First_Name, a.Last_Name, count(*)
from Account a
inner join RCV_Send_Event_Notf m on a.Account_Id = m.R_Account_Id
Group by a.account_Id, a.First_Name, a.Last_Name;
于 2012-05-07T16:31:21.163 回答
1

Oracle 可能不喜欢“数字”这个名称,因为它是一个关键字。我将查询“归结”并重命名为“数字”,它似乎可以工作

SELECT m.number_col
FROM dual a,
(SELECT   123 AS number_col
FROM dual ) m

您还可以使用 WITH 子句:

 WITH m AS
(SELECT  sysdate  as number_col
FROM dual )
SELECT m.number_col
FROM dual a, m
于 2012-05-07T16:34:05.837 回答