sql >> データベース >  >> RDS >> Oracle

ORACLE12.2.01類似した名前の異なるテーブルから列を選択->使用される内部列識別子

    Oracle(DocId 2658003.1)によると、これは次の3つの条件が満たされた場合に発生します。

    1. ANSIに参加
    2. UNION / UNION ALL
    3. 同じテーブルがクエリに複数回表示される

    明らかに、「QCSJ_C」は、OracleがANSIスタイルの結合を変換するときに内部的に使用されます。

    編集:

    最小限の例を見つけました:

    SELECT * FROM dual d1 JOIN dual d2 ON d1.dummy=d2.dummy
    UNION
    SELECT * FROM dual d1 JOIN dual d2 ON d1.dummy=d2.dummy;
    
    QCSJ_C000000000300000 QCSJ_C000000000300001
    X                     X
    

    非ANSI結合構文を使用して修正できます:

    SELECT * FROM dual d1, dual d2 WHERE d1.dummy=d2.dummy
    UNION
    SELECT * FROM dual d1, dual d2 WHERE d1.dummy=d2.dummy;
    
    DUMMY DUMMY_1
    X     X
    

    または、できれば*の代わりに列名を使用します :

    SELECT d1.dummy, d2.dummy FROM dual d1 JOIN dual d2 ON d1.dummy=d2.dummy
    UNION
    SELECT d1.dummy, d2.dummy FROM dual d1 JOIN dual d2 ON d1.dummy=d2.dummy;
    
    DUMMY DUMMY_1
    X     X
    


    1. 異なるデータベース間で外部キー制約を維持する方法は?

    2. チェッカーラン

    3. データベース内の部品表(BOM)構造の識別

    4. すべてのSQLServer外部キーに一致するインデックスが必要ですか?