0

ここで作成したかなり複雑なクエリがあります。その仕事は、まだ承認されていないドキュメントのすべての詳細を選択することであり (これだけ機能します)、ドキュメント参照のリストとそのドキュメントを送信したユーザーの名前を返します。次に、テーブルを結果に LEFT JOIN して、それらのドキュメントにまだ承認を登録していないすべてのユーザーを取得します (これは、ネストされた選択で行っていることです。つまり、 approvalstatus = '追加が必要なレコードを特定するために必要でした。

SELECT substr(m.xreference,1,instr(m.xreference,'/')-1) Proj,
       m.xreference,       
       m.xversion,
       a1.assignedtoname,
       a1.actiondate
FROM   documentapprovers a1,
       docmeta m,
       (SELECT DISTINCT a2.documentid
        FROM   documentapprovers a2
        WHERE  a2.approvalstatus = 'Pending') penders
WHERE  penders.documentid = a1.documentid
       AND m.did = a1.documentid
       AND a1.approverrole = 'Author'
       AND a1.approvertitle = 'Author'
       AND a1.actiondate <= SYSDATE - interval '3' month
ORDER  BY proj ASC, a1.assignedtoname DESC, m.xreference asc

上記のクエリを次のようにネストして、LEFT JOIN を実行しようとしました。

SELECT a3.assignedtoname, a4.*
FROM (SELECT substr(m.xreference,1,instr(m.xreference,'/')-1) Proj,
               a1.documentid,
               m.xreference,       
               m.xversion,
               a1.assignedtoname,
               a1.actiondate
        FROM   documentapprovers a1,
               docmeta m,
               (SELECT DISTINCT a2.documentid
                FROM   documentapprovers a2
                WHERE  a2.approvalstatus = 'Pending') penders
        WHERE  penders.documentid = a1.documentid
               AND m.did = a1.documentid
               AND a1.approverrole = 'Author'
               AND a1.approvertitle = 'Author'
               AND a1.actiondate <= SYSDATE - interval '3' month) a4
LEFT JOIN documentapprovers a3
ON a3.documentid = a4.documentid

しかし、コマンドが正しく終了されていないというエラーが表示されます。私はそれを何度も繰り返しましたが、完全に終了したようです。誰でも助けることができますか?

Oracleの非常に古いバージョンであることに注意してください.8iだと思います。

4

1 に答える 1

1

Oracle 8i は非常に古く、バージョン 9i まで ANSI 結合は構文の一部ではありませんでした。

独自の Oracle 外部結合構文を使用してみてくださいFROM a4, a3 WHERE a4.documentid = a3.documentid (+)

于 2013-04-30T12:36:46.347 に答える