2017-06-13 46 views
1

我有4个表,其中3个联接,但我需要从第四个表(Table_D)获取一个字段。为了简便起见,可以说他们是表A,B,C,D从同一个查询中不在左外部联接中的表中获取一个字段

Select Distinct A.Field_1, B.Field_2, C.Field_3 
From Table_A 
Left outer join B on A.Field_z= B.Field_z 
Left Outer Join C on A.Field_z= C.Field_z 
where A.Field_z in (1111); 

这似乎是工作,但我需要在Table_D一个领域,只有通过Table_C连接到表-A。

如何将它添加到连接?或者我可以吗?

谢谢!

WB

+2

你试过了什么?你应该可以加入它就好了。 –

回答

0

on条款有where条款基本上所有的功能。 on子句中任何部分的连接可以引用from子句中任何实体的任何属性,我怀疑你的困惑来自于认为你只能将后续实体连接到from子句中的第一个实体。如果Table_D通过Table_C有关Table_A,你可能会看到一个from/join/on结构,如:

select a.thing, b.things, c.thang, d.stuff 
from Table_A a 
left join Table_B b 
    on a.id = b.a_id 
left join Table_C c 
    on a.id = c.a_id 
left join Table D d 
    on d.id = c.d_id 
where 
    a.this = b.that 

注意单词“外”的左边是隐含的加入,是没有必要的语法完成。

+1

谢谢!这真的帮助我产生我需要的查询。我现在每天都在使用它。这是我第一次使用stackoverflow来提出问题,所以我认为我只是打了检查标记。如果我需要做其他事情,请告诉我。感谢所有回答! – BananaChip

+0

是绿色的选中标记!如果你感觉特别慷慨,向上的箭头也有助于我的声誉。 –

+0

很高兴我能帮到你 –

0

当然,您可以添加它。您没有指定逻辑,但是像这样:

Select Distinct A.Field_1, B.Field_2, C.Field_3, D.?? 
From Table_A a Left outer join 
    B 
    on A.Field_z= B.Field_z Left Outer Join 
    C 
    on A.Field_z= C.Field_z Left Outer Join 
    D 
    on . . . 
where A.Field_z in (1111); 

只需填写您想要的条件。您需要一个left join,因为cd之间的条件会将外连接变为c为内连接。

0

如果我理解正确的话,我相信这会工作:

Left Outer Join D on C.Field_z= D.Field_z 
0

你可以试试这个方法。这将有助于我猜

Select Distinct A.Field_1, B.Field_2, C.Field_3, c.Field_4 
From Table_A 
Left outer join B on A.Field_z= B.Field_z 
Left Outer Join (select C.field_3, d.Field_4, c.Field_z from c inner join d on c.field_z = d.field_z) c on A.Field_z= C.Field_z 
where A.Field_z in (1111); 
相关问题