Sql

ORA-01791:選択された式ではありません



Ora 01791 Not Selected Expression



SELECT NVL(T11.DEPID, 'NULL'), NVL(T11.PARDEPID, 'NULL'), NVL(T11.DEPNAME, 'NULL') FROM (SELECT DISTINCT DEPID, PARDEPID, DEPNAME, DEPCODE, SPECIALTYCODE, ROTAID FROM SYS_DEPARTMENT START WITH DEPID IN (SELECT DEPID FROM SYS_SM_ROLEDEP WHERE ROLEID IN (SELECT ROLEID FROM SYS_USERQUARTERS WHERE USERID = '1')) CONNECT BY PARDEPID = PRIOR DEPID ORDER BY ORDERNO) T11

現在、上記のコードをデータベースで実行すると、「ORA-01791:選択されていない式」というエラーが表示されます。

分析後、ORDER BYで複数の列が指定されている場合、結果は最初に句の最初の列に従ってソートされ、次に2番目の列に従ってソートされます。
SELECTに表示されない列名は、ORDERBY句でも使用できます。メインのTABLEには行がありますが、DISTINCTキーワードがSELECT句に含まれている場合は、表示されている列名のみを使用できます。SELECT句の場合はAny演算子を使用するため、の式とまったく同じにする必要があります。 ORDER BY句のSELECT句。それ以外の場合は、ORA-01791ERRORが表示されます。



したがって、対応するフィールドを追加できます。

SELECT NVL(T11.DEPID, 'NULL'), NVL(T11.PARDEPID, 'NULL'), NVL(T11.DEPNAME, 'NULL') FROM (SELECT DISTINCT DEPID, PARDEPID, DEPNAME, DEPCODE, SPECIALTYCODE, ROTAID, ORDERNO FROM SYS_DEPARTMENT START WITH DEPID IN (SELECT DEPID FROM SYS_SM_ROLEDEP WHERE ROLEID IN (SELECT ROLEID FROM SYS_USERQUARTERS WHERE USERID = '1')) CONNECT BY PARDEPID = PRIOR DEPID ORDER BY ORDERNO) T11