Sql ORA-00998:必须使用列别名命名此表达式

Sql ORA-00998:必须使用列别名命名此表达式,sql,oracle,Sql,Oracle,我知道我应该在所有列中添加alias,我正在这样做,但仍然会出错 CREATE TABLE MENTIONS AS SELECT UM.USER_ID AS U_ID, UM.SCREEN_NAME AS USER_SCREEN_NAME, UM.MENTION_ID AS M_USER_ID, ( SELECT UI.USER_SCREEN_NAME AS MENTIONED_USER FROM

我知道我应该在所有列中添加alias,我正在这样做,但仍然会出错

CREATE TABLE MENTIONS AS SELECT
    UM.USER_ID AS U_ID,
    UM.SCREEN_NAME AS USER_SCREEN_NAME,
    UM.MENTION_ID AS M_USER_ID,
    (
        SELECT
            UI.USER_SCREEN_NAME AS MENTIONED_USER
        FROM
            USER_INFO UI
        WHERE
            UI.USER_ID = UM.MENTION_ID
        AND ROWNUM = 1
    )
FROM
    USER_MENTION UM
用户提及表

 USER_ID       SCREEN_NAME    MENTION_ID
135846337   irisschrijft     774759032636727300
50117969    Chjulian         13769472
14411827    thenriques45     13769472
26681613    ahenotri        252074645
26681613    ahenotri         9796472
158378782   SpringerOpen    9796472
144241914   Kumarappan      252074645
用户信息表:

  USER_ID     USER_SCREEN_NAME
 22553325   jasonesummers   
23435691    QRJAM   false   
67421923    inTELEgentMSP   
97393397    knauer0x    
85303739    MarriageTheorem 
3842711     seki    
3036414608  Bayes_Rule  
838677852   BOLIGATOR   
我仍然收到上面提到的错误,我做错了什么?

查找。这里提到了错误,但没有附加信息

在这种情况下,请查阅 由于我不知道的原因,很多错误消息在9i手册中有描述,但在更高版本的手册中没有。9i是一个相当旧的版本,因此说明可能已过时。但它可能包含有价值的提示

ORA-00998必须使用列别名命名此表达式 原因:CREATE VIEW语句中使用了表达式或函数,但未指定相应的列名。在视图中使用表达式或函数时,必须在CREATE view语句中明确指定视图的所有列名。
操作:在视图名称后的括号中为视图中的每列输入列名

我们没有视图,只有一个由select创建的表。实际上,选择列表的最后一个表达式是一个没有别名的表达式。因此,请为最后一个表达式使用别名来尝试您的语句。所以试试看

CREATE TABLE MENTIONS AS SELECT
    UM.USER_ID AS U_ID,
    UM.SCREEN_NAME AS USER_SCREEN_NAME,
    UM.MENTION_ID AS M_USER_ID,
    (
        SELECT
            UI.USER_SCREEN_NAME
        FROM
            USER_INFO UI
        WHERE
            UI.USER_ID = UM.MENTION_ID
        AND ROWNUM = 1
    ) AS MENTIONED_USER
FROM
    USER_MENTION UM

内部选择列表中的列别名无效,可以删除

查询的问题是
create表中的每一列都需要有一个名称。您认为您正在子选择中指定名称。然而,你不是

子查询只是返回一个值,而不是一个带名称的值。因此,您版本中提到的用户
什么也不做。我想这有点棘手。考虑标量子查询的一种方式是,它只是另一个表达式或函数调用。内部发生的事情不会影响外部查询——除了返回的值

正确的语法是将列别名放在subselect的外部,而不是内部:


子选择的结果没有别名。请尝试将用户移动到子查询末尾之外?您正在创建一个表。该列需要有一个名称。
CREATE TABLE MENTIONS AS
    SELECT UM.USER_ID AS U_ID, UM.SCREEN_NAME AS USER_SCREEN_NAME, UM.MENTION_ID AS M_USER_ID,
           (SELECT UI.USER_SCREEN_NAME
            FROM USER_INFO UI
            WHERE UI.USER_ID = UM.MENTION_ID AND ROWNUM = 1
           ) AS MENTIONED_USER
    FROM USER_MENTION UM;