2015-07-06 2 views
1

Ниже приведена часть моего запроса. В том же запросе я выбираю COLUMN_1 из таблицы TABLE2 с проверкой состояния. Также я присоединяюсь к этой таблице в конце с одним из условий во внутреннем выборе, как показано ниже. Можем ли мы каким-либо другим способом справиться с этой ситуацией, используя несколько `SELECT внутри.Множественный выбор для aleady соединенный стол

SELECT 
    T1.COLUMN_1 
    , (SELECT COLUMN_1 FROM TABLE2 WHERE COLUMN_22 ='A' AND COLUMN_11=T2.COLUMN_11) 
    , T1.COLUMN_2 
    , (SELECT COLUMN_1 FROM TABLE2 WHERE COLUMN_22 ='B' AND COLUMN_11=T2.COLUMN_11) 
    , T1.COLUMN_3 
    , (SELECT COLUMN_1 FROM TABLE2 WHERE COLUMN_22 ='C' AND COLUMN_11=T2.COLUMN_11) 
    , T1.COLUMN_4 
    , (SELECT COLUMN_1 FROM TABLE2 WHERE COLUMN_22 ='D' AND COLUMN_11=T2.COLUMN_11) 
    , T1.COLUMN_5 
    , (SELECT COLUMN_1 FROM TABLE2 WHERE COLUMN_22 ='E' AND COLUMN_11=T2.COLUMN_11) 
    , T1.COLUMN_6 
    , (SELECT COLUMN_1 FROM TABLE2 WHERE COLUMN_22 ='F' AND COLUMN_11=T2.COLUMN_11) 
FROM TABLE1 T1, TABLE2 T2 
    -- plus two more tables 
    --plus some other conditions 
WHERE T1.COLUMN_11=T2.COLUMN_11 

ответ

2

Использование CASE вместо:

SELECT T1.COLUMN_1 
    ,CASE 
     WHEN T2.COLUMN_22 = 'A' 
      THEN T2.COLUMN_1 
     END 
    ,T1.COLUMN_2 
    ,CASE 
     WHEN T2.COLUMN_22 = 'B' 
      THEN T2.COLUMN_1 
     END 
    ,T1.COLUMN_3 
    ,CASE 
     WHEN T2.COLUMN_22 = 'C' 
      THEN T2.COLUMN_1 
     END 
    ,T1.COLUMN_4 
    ,CASE 
     WHEN T2.COLUMN_22 = 'D' 
      THEN T2.COLUMN_1 
     END 
    ,T1.COLUMN_5 
    ,CASE 
     WHEN T2.COLUMN_22 = 'E' 
      THEN T2.COLUMN_1 
     END 
    ,T1.COLUMN_6 
    ,CASE 
     WHEN T2.COLUMN_22 = 'F' 
      THEN T2.COLUMN_1 
     END 
FROM TABLE1 T1 
INNER JOIN TABLE2 T2 ON T1.COLUMN_11 = T2.COLUMN_11; 

EDIT

Я изменил запрос на использование Стандарт ANSI синтаксис объединения. Но это изменение не имеет отношения к тому, что вы просите. Вы можете сохранить синтаксис соединения, если хотите. Единственное релевантное изменение - в части запроса SELECT.

+0

Но с этим решением у вас будет только один результат T2.COLUMN_1. –

+2

@eyp: не уверен, что вы имеете в виду. Я буду знать, что я сохраняю намерение OP. – sstan

+0

Да, вы правы ... Я также неправильно читаю запрос ... с теми похожими именами, у которых исходный запрос трудно читать. –

0

У вас не будет очень чистых решений, я думаю. Другая возможность - с внутренним соединением в каждом случае:

SELECT 
T1.COLUMN_1, 
T2_1.COLUMN_1, 
T1.COLUMN_2, 
T2_2.COLUMN_1 
T1.COLUMN_3, 
T2_3.COLUMN_1 
T1.COLUMN_4, 
T2_4.COLUMN_1 
T1.COLUMN_5, 
T2_5.COLUMN_1 
T1.COLUMN_6, 
T2_6.COLUMN_1 
FROM TABLE1 T1 
    INNER JOIN TABLE2 T2_1 ON T1.COLUMN_11=T2_1.COLUMN_11 AND T2_1.COLUMN_22 = 'A', 
    INNER JOIN TABLE2 T2_2 ON T1.COLUMN_11=T2_2.COLUMN_11 AND T2_2.COLUMN_22 = 'B', 
    INNER JOIN TABLE2 T2_3 ON T1.COLUMN_11=T2_3.COLUMN_11 AND T2_3.COLUMN_22 = 'C', 
    INNER JOIN TABLE2 T2_4 ON T1.COLUMN_11=T2_4.COLUMN_11 AND T2_4.COLUMN_22 = 'D', 
    INNER JOIN TABLE2 T2_5 ON T1.COLUMN_11=T2_5.COLUMN_11 AND T2_5.COLUMN_22 = 'E', 
    INNER JOIN TABLE2 T2_6 ON T1.COLUMN_11=T2_6.COLUMN_11 AND T2_6.COLUMN_22 = 'F', 
WHERE 

etc... 
+0

Что ?, этот запрос выполняет несколько внутренних объединений с одной и той же таблицей, поэтому в одном столбце нет двух разных значений. Посмотрите на псевдонимы –

+0

Да, я знаю, что это трудно читать, но нет чистого ответа с этими именами таблиц и тем, что он хочет получить. –

Смежные вопросы