多个选择aleady连接表

时间:2015-07-06 13:08:44

标签: oracle

以下是我的选择查询的一部分。在同一个查询中,我从表COLUMN_1中选择TABLE2并进行条件检查。另外,我最后加入这个表,内部选择中的一个条件如下所示。我们可以有任何其他方法来处理这种情况,而不使用多个`SELECT inside。

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 个答案:

答案 0 :(得分: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;

修改

我更改了查询以使用ansi join语法。但这种变化与你所要求的无关。如果需要,您可以保留连接语法。唯一相关的更改位于查询的SELECT部分。

答案 1 :(得分: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...