子查询Oracle

时间:2016-05-19 15:33:53

标签: sql oracle join subquery alias

我有LEFT JOIN的SELECT语句,连接表是子查询。 Oracle无法识别第二个子查询的别名。它适用于DB2,但不适用于Oracle。 我如何实现它或重写我的查询?

SELECT *                  
 FROM                                                      
 (SELECT     E.C3 AS  COLUMN3        
    , E.C4 AS  COLUMN4        
   FROM TBL_1 D                            
    , TBL_2 E                            
WHERE D.C6  =  E.C6 ) B                                                              
LEFT  JOIN  TABLE   
(SELECT  C.C1                          
 FROM    TBL_3  C                   
 WHERE                                                  
 C.C7            = 'hello'      
 AND B.C3            = C.C8                            
UNION ALL                                                 
 SELECT  C.C1                          
    FROM    TBL_3  C                
    WHERE                                               
    C.C7          = 'world'      
    AND B.C4          =  C.C8                       
    )            A               
ON 1 = 1

Oracle错误消息:      ORA-00904:" B"。" C3":无效的标识符

2 个答案:

答案 0 :(得分:4)

您可以将此查询简化为以下内容,删除子查询:

Select      A.Col1, B.Col2
From        tbl_AJoin   A
Left Join   tbl_BJoin   B   On  A.col1 = B.col1

答案 1 :(得分:1)

您遇到语法错误。这样:

select * from (select col1 from tbl_Ajoin) A
left join table (select col2 from tbl_Bjoin where A.col1 = tbl_Bjoin.col1) B     
ON 1 = 1

应该是这样的:

select * from (select col1 from tbl_Ajoin) A
left join (select col2 from tbl_Bjoin where A.col1 = tbl_Bjoin.col1) B     
ON 1 = 1

或更具体地说,这个:

left join table (select

不应该有table这个词。它应该是这样的:

left join (select