ホームページ > データベース > mysql チュートリアル > Oracle 10.2 クエリの WHERE 句で CASE 式列を使用するにはどうすればよいですか?

Oracle 10.2 クエリの WHERE 句で CASE 式列を使用するにはどうすればよいですか?

Linda Hamilton
リリース: 2025-01-04 22:46:42
オリジナル
768 人が閲覧しました

How Can I Use a CASE Expression Column in the WHERE Clause of an Oracle 10.2 Query?

Oracle 10.2 の WHERE 句で 'Case Expression Column' を使用する

Oracle 10.2 では、次の操作を実行しようとすると ORA-00904 エラーが発生します。 WHERE 句で case 式列を使用します。これは、列が選択される前に WHERE 条件が評価される SQL ステートメントの論理処理順序が原因で発生します。

エラー説明:

SQL ステートメントは、次の順序:

  • FROM: テーブルの選択と行組み合わせ
  • WHERE: 条件に基づく行フィルタリング
  • GROUP BY: 行グループ化
  • HAVING: 追加行フィルタリング
  • SELECT: 列選択
  • DISTINCT: 行が重複しています削除
  • UNION/EXCEPT/INTERSECT: サブクエリ操作
  • ORDER BY: 行の順序

指定されたクエリで、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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート