Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.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
Sql 从不在同一查询的左外部联接中的表中获取字段_Sql_Sql Server_Join - Fatal编程技术网

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

Sql 从不在同一查询的左外部联接中的表中获取字段,sql,sql-server,join,Sql,Sql Server,Join,我有4个表,其中3个是连接的,但我需要从第四个表(表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); 这似乎可行,但我需要表D中的一个字段

我有4个表,其中3个是连接的,但我需要从第四个表(表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);
这似乎可行,但我需要表D中的一个字段,该字段仅通过表C连接到表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);

只要填写你想要的条件。您需要一个
左联接
,因为
c
d
之间的条件会将
c
的外部联接变成内部联接。

当然可以添加它。您不需要指定逻辑,但可以指定如下内容:

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

只要填写你想要的条件。您需要一个
左联接
,因为
c
d
之间的条件会将
c
的外部联接变成内部联接。

如果我理解正确,我相信这会起作用:

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

如果我理解正确,我相信这是可行的:

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

你可以这样试试。我想这会有帮助的

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
子句中的第一个实体。如果
表D
通过
表C
表A
相关,您可能会在
结构上看到来自
/

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”隐含在左连接中,对于语法完成不是必需的。

on
子句的
基本上具有
where
子句的所有特征
on
子句对于联接的任何部分都可以引用
from
子句中任何实体的任何属性,我怀疑您的混淆是因为您认为只能将后续实体联接到
from
子句中的第一个实体。如果
表D
通过
表C
表A
相关,您可能会在
结构上看到来自
/

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”隐含在左连接中,对于语法完成不是必需的。

您尝试过什么?你应该可以很好地加入,你试过什么?你应该可以很好的加入,谢谢!这确实帮助我生成了所需的查询。我现在每天都在用它。这是我第一次使用stackoverflow提问,所以我想我只是打了个勾。如果我还需要做什么,请告诉我。感谢所有回复的人!绿色的复选标记就是它!如果你觉得特别慷慨,向上箭头也有助于我的声誉。很高兴我能帮上忙谢谢你!这确实帮助我生成了所需的查询。我现在每天都在用它。这是我第一次使用stackoverflow提问,所以我想我只是打了个勾。如果我还需要做什么,请告诉我。感谢所有回复的人!绿色的复选标记就是它!如果你觉得特别慷慨,向上箭头也有助于我的声誉。很高兴我能帮上忙