Нужен лучший вариант - внешнее соединение 32 раза с одной и той же таблицей

У меня неприятная проблема с SQL-запросами, и мне бы очень хотелось помочь с элегантным решением. Я пытаюсь избежать 32 левых внешних присоединений к одной и той же таблице.

База данных - это Teradata.

У меня есть таблица с 14 миллионами записей и 33 столбцами. Первичный ключ (назовем его Trans_Id) и 32 закодированных поля (назовем их encoded_1 ... encoded_32). Примерно так:

CREATE SET TABLE BigTable ,NO FALLBACK , NO BEFORE JOURNAL, NO AFTER JOURNAL, CHECKSUM = DEFAULT
     (
      TRANS_ID VARCHAR(20) CHARACTER SET LATIN NOT CASESPECIFIC,
      ENCODED_1 VARCHAR(10) CHARACTER SET LATIN NOT CASESPECIFIC,
      ENCODED_2 VARCHAR(10) CHARACTER SET LATIN NOT CASESPECIFIC,
      ENCODED_3 VARCHAR(10) CHARACTER SET LATIN NOT CASESPECIFIC,
      ...
      ENCODED_32 VARCHAR(10) CHARACTER SET LATIN NOT CASESPECIFIC )
PRIMARY INDEX ( TRANS_ID );

У меня также есть одна таблица с кодированными / декодированными значениями. Допустим, в этой таблице 100 записей.

CREATE SET TABLE LookupTable ,NO FALLBACK , NO BEFORE JOURNAL, NO AFTER JOURNAL, CHECKSUM = DEFAULT
     (
      UNIQ_PK { just random numbers }
      ENCODED_VAR VARCHAR(10) CHARACTER SET LATIN NOT CASESPECIFIC,
      DECODED_DESC VARCHAR(50) CHARACTER SET LATIN NOT CASESPECIFIC)
PRIMARY INDEX ( UNIQ_PK );

Я хочу избежать такого неприятного соединения (я использовал многоточие вместо отображения всех 32 внешних соединений):

SELECT 
TRANS_ID
, a.ENCODED_1
, b1.DECODED_DESC DECODED_DESC_1
, a.ENCODED_2
, b2.DECODED_DESC DECODED_DESC_2
...
, a.ENCODED_31
, b31.DECODED_DESC DECODED_DESC_31
, a.ENCODED_32
, b32.DECODED_DESC DECODED_DESC_32
FROM BigTable a
LEFT OUTER JOIN LookupTable b1 ON a.ENCODED_1 = b1.ENCODED
LEFT OUTER JOIN LookupTable b2 ON a.ENCODED_2 = b1.ENCODED
...
LEFT OUTER JOIN LookupTable b31 ON a.ENCODED_31 = b31.ENCODED
LEFT OUTER JOIN LookupTable b32 ON a.ENCODED_32 = b32.ENCODED

Любая помощь будет принята с благодарностью. У меня такое чувство, что 32 раза внешнее объединение 14M записей - не самый эффективный способ сделать это!

6
задан LukeK 12 May 2011 в 05:40
поделиться