Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle aleady联接表的多重选择_Oracle - Fatal编程技术网

Oracle aleady联接表的多重选择

Oracle aleady联接表的多重选择,oracle,Oracle,下面是我的select查询的一部分。在同一查询中,我从带有条件检查的表表2中选择列_1。此外,我在末尾将此表与内部选择中的一个条件连接起来,如下所示。我们能不能用其他方法来处理这种情况,而不用使用多个“选择内部” SELECT T1.COLUMN_1 , (SELECT COLUMN_1 FROM TABLE2 WHERE COLUMN_22 ='A' AND COLUMN_11=T2.COLUMN_11) , T1.COLUMN_2 , (SELECT COL

下面是我的select查询的一部分。在同一查询中,我从带有条件检查的表
表2
中选择
列_1
。此外,我在末尾将此表与内部选择中的一个条件连接起来,如下所示。我们能不能用其他方法来处理这种情况,而不用使用多个“选择内部”

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

改用
案例

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连接语法。但这种改变与你的要求无关。如果需要,可以保留连接语法。唯一相关的更改是在查询的
选择部分。

我认为您不会有非常干净的解决方案。另一种可能性是按大小写进行内部连接:

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...

但使用此解决方案,您将只有一个T2.COLUMN_1结果。@eyp:不确定您的意思。我知道我是在维护OP的意图是的,你说得对。。。我也误读了这个问题。。。使用那些具有原始查询的相似名称很难读取。什么?此查询正在对同一个表进行多个内部联接,因此同一列中没有两个不同的值。看看这些别名是的,我知道这很难理解,但是对于那些表名和他想要得到的东西,没有一个清晰的答案。