簡體   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