Oracle 10.2 SQL では、WHERE 句内で 'case 式列' を使用しようとすると問題が発生します。 SQL ステートメント処理の論理順序が原因で、エラー「ORA-00904: "%s: 無効な識別子" が発生しました。
SQL ステートメントは次のように処理されます」シーケンス:
元のクエリの WHERE 句内:
SELECT ename , job , CASE deptno WHEN 10 THEN 'ACCOUNTS' WHEN 20 THEN 'SALES' ELSE 'UNKNOWN' END AS department FROM emp WHERE department = 'SALES'
「部門」 CASE 式によって生成された ' 列は、WHERE 句の評価時にはまだ存在しないため、WHERE 句では使用できません。
この制限を克服するには、クエリをサブクエリ内で囲みます。
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' ;
または、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' ;
WHERE 句の条件が特定の部門番号に直接一致する場合、簡易オプションが可能です:
SELECT ename , job , 'SALES' AS department FROM emp WHERE deptno = 20 ;
以上がOracle 10.2のWHERE句でCASE式列を使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。