1. ホーム
  2. sql

[解決済み] ORA-00998: この式には、列の別名を付ける必要があります。

2022-02-18 17:32:37

質問

すべてのカラムにエイリアスを追加する必要があることを知り、そうしているのですが、まだエラーが出ます。

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_MENTIONテーブル

 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_INFO テーブルです。

  USER_ID     USER_SCREEN_NAME
 22553325   jasonesummers   
23435691    QRJAM   false   
67421923    inTELEgentMSP   
97393397    knauer0x    
85303739    MarriageTheorem 
3842711     seki    
3036414608  Bayes_Rule  
838677852   BOLIGATOR   

まだ上記のようなエラーが出ますが、何が間違っているのでしょうか?

解決方法を教えてください。

を検索します。 現在のOracleのバージョンのOracle Error Message Manual . ここでは、エラーについて言及されていますが、追加情報はありません。

このような場合は バージョン9iのオラクルエラーメッセージマニュアル 理由はわかりませんが、多くのエラーメッセージは、9iのマニュアルには説明がありますが、上位バージョンのマニュアルにはありません。9iはかなり古いバージョンなので、記述が古くなっている可能性があります。しかし、貴重なヒントが含まれているかもしれません。

<ブロッククオート

ORA-00998 は、この式に列の別名を付ける必要があります。
原因 CREATE VIEW 文で式または関数が使用されましたが、対応する列名が指定されていません。式または関数がビューで使用されている場合、ビューのすべての列名は CREATE VIEW 文で明示的に指定する必要があります。
アクション ビューの各カラムの名前を、ビュー名の後の括弧内に入力します。

ビューではなく、selectで作成されたテーブルがあります。そして、実は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

内側のセレクトリストのカラムエイリアスは無駄なので、削除してください。