2016-11-29 60 views
0

鑑於這種SQL查詢:選擇兩列一個加入

select A.field1 as field 
from A left join B 
on A.field1 = B.field1 
union all 
select A.field2 as field 
from A left join B 
on A.field2 = B.field1; 

是否有某種方式來獲得與幾行一樣嗎?即:是否有另一種方法可以從表A中獲取兩列,每一列都與來自表B的列分隔開來,然後都放入相同的結果集列中? 需要的是真正的查詢的原因有一個更復雜的連接和條件,這是有點大,而且幾乎都是多餘的。

預先感謝您!

+1

這個查詢很奇怪。它與「從A中選擇字段1從A中選擇字段2」幾乎相同(區別在於字段1上的表B中有重複)。你究竟想達到什麼目的? – arturro

回答

2

隨着left join,並假設加盟B不會產生重複,那麼你的查詢更簡單地寫爲:

select A.field1 as field from A 
union all 
select A.field2 from A; 

left joinB不會做在這種情況下任何東西。

我假設你的查詢比較複雜,或者你打算進行內連接。你可以做的union all之前join

select A.field 
from (select field1 from A union all 
     select field2 from A 
    ) a join 
    B 
    on A.field = B.field1 ; 

這是否有惡化或相同的性能取決於數據的性質。