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

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

Patricia Arquette
リリース: 2025-01-03 21:13:40
オリジナル
812 人が閲覧しました

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

WHERE 句での 'Case 式列' の使用

Oracle 10.2 SQL では、WHERE 句内で 'case 式列' を使用しようとすると問題が発生します。 SQL ステートメント処理の論理順序が原因で、エラー「ORA-00904: "%s: 無効な識別子" が発生しました。

SQL 処理の論理順序

SQL ステートメントは次のように処理されます」シーケンス:

  1. FROM: テーブルの選択と行の組み合わせ
  2. WHERE: 行filtering
  3. GROUP BY: 行のグループ化
  4. HAVING: 行のフィルタリング
  5. SELECT: 列の取得
  6. DISTINCT: 重複行の削除
  7. UNION /EXCEPT/INTERSECT: サブクエリの結果操作
  8. ORDER BY: 行ソート

エラーの原因

元のクエリの 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 句では使用できません。

解決策 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 式を重複させる

または、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 サイトの他の関連記事を参照してください。

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