0

皆さん、

誰でも Oracle データベース 10g のサブクエリを手伝ってもらえますか? 最初のテーブルの列の値を、2 番目のテーブルの別の列の値として抽出する必要があります。私は現在、このステートメントを使用しています:

SELECT 
CASE WHEN A.column1 = 'A' THEN 'aaa'
WHEN A.column1 = 'B' THEN 'bbb'
.......
WHEN A.column1 = 'X' THEN 'xxx'
ELSE 'bad' END AS COLUMN1, A.* 
FROM TRANSACTION_TABLE A,  CATEGORY_TABLE B 
WHERE A.column1 IS NOT NULL 
AND A.column1 <> ' '

これはエレガントなアプローチではないため、次のように CATEGORY_TABLE B からサブセレクトを使用しようとしています。

SELECT A.column1, A.* 
FROM TRANSACTION_TABLE A,  CATEGORY_TABLE B 
WHERE A.column1 IS NOT NULL 
AND A.column1 = B.column_b_1 
AND A.column1 <> ' '
AND A.column1 IN (SELECT B.column_b_1_descr FROM CATEGORY_TABLE B 
WHERE B.FIELDNAME = 'column1' AND A.column1 = B.column_b_1)

したがって、サブクエリを使用しても結果を得ることができず、多くの条件に対して CASE を使用し続けたくありません。単に A.column1 の値を B.column_b_1_descr の説明的な値に置き換えたいだけです。読みやすいからです。 . フィードバックをいただければ幸いです。ありがとう

4

1 に答える 1

1

私があなたの質問を誤解していない限り...

CATEGORY_TABLE:
  name | value
   A      aaa
   B      bbb
   C      ccc
 ...


SELECT B.value AS COLUMN1, A.\* 
FROM TRANSACTION\_TABLE A, CATEGORY\_TABLE B 
WHERE A.column1 = B.name

また

SELECT t2.value as COLUMN1, t1.\* 
FROM TRANSACTION\_TABLE t1 
INNER JOIN CATEGORY\_TABLE t2 ON t1.column1 = t2.name;

内部結合は、null 値または一致しない行を自動的に除外するため、where 句は必要ありません。

于 2009-07-16T01:16:46.667 に答える