Использование подвыбора Oracle для замены оператора CASE - PullRequest
0 голосов
/ 16 июля 2009

Hy, ребята,

Может кто-нибудь помочь мне с подзапросом в базе данных Oracle 10g? Мне нужно извлечь значения для столбца в первой таблице в качестве значения другого столбца во второй таблице. Я в настоящее время использую это утверждение:

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, так как они легче читать. Буду признателен за любые отзывы. Спасибо

1 Ответ

1 голос
/ 16 июля 2009

Если я не понимаю ваш вопрос ...

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;

Предложение where не требуется, поскольку внутреннее объединение автоматически исключает строки с нулевыми значениями или без совпадений.

...