Oracle 10.2 の WHERE 句で 'Case Expression Column' を使用する
Oracle 10.2 では、次の操作を実行しようとすると ORA-00904 エラーが発生します。 WHERE 句で case 式列を使用します。これは、列が選択される前に WHERE 条件が評価される SQL ステートメントの論理処理順序が原因で発生します。
エラー説明:
SQL ステートメントは、次の順序:
指定されたクエリで、WHERE 句は計算された部門列を使用しようとします。 CASE式で。ただし、この列は WHERE 句の実行後まで設定されず、エラーが発生します。
解決策 1: サブクエリの囲み
この制限を克服するには、元のクエリを囲みます。サブクエリでクエリを実行し、次から目的の列を選択します。それ:
SELECT * FROM ( SELECT ename , job , CASE deptno WHEN 10 THEN 'ACCOUNTS' WHEN 20 THEN 'SALES' ELSE 'UNKNOWN' END AS department FROM emp ) tmp WHERE department = 'SALES' ;
解決策 2: 条件付きレプリケーション
WHERE 条件の CASE 式をレプリケートします:
SELECT ename , job , CASE deptno WHEN 10 THEN 'ACCOUNTS' WHEN 20 THEN 'SALES' ELSE 'UNKNOWN' END AS department FROM emp WHERE CASE deptno WHEN 10 THEN 'ACCOUNTS' WHEN 20 THEN 'SALES' ELSE 'UNKNOWN' END = 'SALES' ;
代替解決策:
の場合可能であれば、より単純なクエリの使用を検討してください:
SELECT ename , job , 'SALES' AS department FROM emp WHERE deptno = 20 ;
以上がOracle 10.2 クエリの WHERE 句で CASE 式列を使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。