2015-07-21 54 views
0

我有一个db2查询,我今天意识到我需要扩展那个查询。为什么我不能做一个完整的外连接

我的表已经非常复杂的连接,所以我真的不想添加联合查询。我想做一个完整的外连接。

目前,它显示

 
    SELECT 
     a.id 
     ,a.city 
     ,a.state 
     ,case when a.thing = b.thing then a.thing else b.thing end 
     ,sum(case when c.thing = 'thing' then 1 else 0 end) 
     ,b.id 
     ,b.name 

    FROM 
     a 
    INNER JOIN b -- I want to change this to FULL OUTER JOIN 
     ON a.id = b.id 
    LEFT JOIN c 
     ON a.id = c.id 
    LEFT JOIN (d 
     INNER JOIN e 
      ON d.id = e.id 
     ) 
    WHERE 
     --logic 
    GROUP BY 
     --for the aggregate functions 
    ORDER BY 
     --logic 


有人能告诉我,当我尝试做一个完全外连接,它说:“完全外部联接不支持此查询”?我将如何克服这一点?

我认为这是因为其他左连接。

+0

你有5张桌子,4'JOIN'条款,但只有3'ON'条款。这是你的意思吗? –

+0

我相信如此。我遗漏了一些c,d和e Case语句和select语句中的聚合函数。 – Emwat

+1

@Emwat。 。 。请编辑您的问题并包含正在生成错误的查询。 –

回答

0

它可能无法将外连接与左连接组合在一起。您可能需要使外连接子查询(也加入了一些缺失的别名和ON子句):

SELECT 
    ab.a_id 
    ,ab.city 
    ,ab.state 
    ,ab.thing 
    ,sum(case when c.thing = 'thing' then 1 else 0 end) 
    ,ab.b_id 
    ,ab.name 

FROM 
(
    SELECT 
     a.id a_id 
     ,a.city 
     ,a.state 
     ,case when a.thing = b.thing then a.thing else b.thing end thing 
     ,b.id b_id 
     ,b.name 

    FROM 
     a 
    FULL OUTER JOIN b 
     ON a.id = b.id 
) ab 
LEFT JOIN c 
    ON ab.id = c.id 
LEFT JOIN (d 
    INNER JOIN e 
     ON d.id = e.id 
    ) f 
    ON ... 
WHERE 
    --logic 
GROUP BY 
    --for the aggregate functions 
ORDER BY 
    --logic 
相关问题