繁体   English   中英

从同一查询中不在左外连接中的表中获取字段

[英]Getting a field from a table that is not in the left outer join in the same query

我有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连接到Table_A。

如何将其添加到联接中? 或者我可以吗?

谢谢!

WB

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

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到内连接。

如果我理解正确,我相信这会奏效:

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

你可以试试这种方式。 这将有助于我猜

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);

on子句基本上具有where子句的所有功能。 对于连接的任何部分的on子句可以引用from子句中任何实体的任何属性,我怀疑你的混淆来自于认为你只能将后续实体加入from子句中的第一个实体。 如果Table_DTable_ATable_C相关,您可能会看到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

请注意,单词“outer”隐含在左连接中,并不是语法完成所必需的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM