2014-11-05 35 views
1

我正在構建一個查詢,在該查詢中,我試圖創建一個獨佔左連接,但是如果不將兩個查詢與union all放在一起,我找不到解決方案。在多個表格上獨佔左加入

我的SQL不按預期方式工作:

select link_table.key as lk_key, table_a.key as a_key, table_b.key as b_key 
from link_table 
left join table_a on (link_table.key = table_a.key_link_table) 
left join table_b on (link_table.key = table_b.key_link_table) 

我得到的結果是:

lk_key  a_key b_key 
123  abc  xyz 
456  def  uvw 
789  ghi  NULL 

我的解決方法:

select link_table.key as lk_key, table_a.key as a_key, null as b_key from link_table 
left join table_a on (link_table.key = table_a.key_link_table) 
union all 
select link_table.key as lk_key, null as a_key, table_b.key as b_key from link_table 
left join table_b on (link_table.key = table_b.key_link_table) 

我能得到什麼作爲結果,並希望第一個SQL t o執行:

lk_key  a_key b_key 
123  abc  NULL 
123  NULL xyz 
456  def  NULL 
456  NULL uvw 
789  ghi  NULL 

這是可能的一個查詢?

+1

你的「解決方法」有什麼問題? – 2014-11-05 20:31:37

+1

如果可行,爲什麼改變它?運行需要9年嗎?它是否拉錯了數據?它裏面是否有太多元音? – Siyual 2014-11-05 20:36:59

+0

我想也許有一個符合我的具體需求而不是使用union的sql/oracle關鍵字。不,我現在沒有性能問題。這只是花了我一些時間,直到我找出問題。 – Flexy 2014-11-05 21:08:12

回答

0

重新格式化問題:請使用代碼將這些東西放在這裏。

select 
link_table.key as lk_key, 
table_a.key as a_key, 
table_b.key as b_key 
    from link_table 
left join table_a on 
    (link_table.key = table_a.key_link_table) 
left join table_b on 
    (link_table.key = table_b.key_link_table) 

我能得到什麼結果爲:

lk_key a_key b_key 
123 abc xyz 
456 def uvw 
789 ghi NULL 

通緝的結果:

lk_key a_key b_key 
123 abc NULL 
123 NULL xyz 
456 def NULL 
456 NULL uvw 
789 ghi NULL 

我的解決方法

select * from link_table 
left join 
table_a on (link_table.key = table_a.key_link_table) 

union all 

select * 
from link_table 
left join table_b on 
    (link_table.key = table_b.key_link_table) 

試試這個:

select 
link_table.key as lk_key, 
table_a.key as a_key, 
table_b.key as b_key 
    from link_table 
full outer join table_a on 
    (link_table.key = table_a.key_link_table) 
full outer join table_b on 
    (link_table.key = table_b.key_link_table) 
where a_key is NULL or 
b_key is NULL 

http://i.stack.imgur.com/qje6o.png

+0

謝謝,我會嘗試使用完整的外連接,看看它是否能夠在我再次訪問數據庫時運行。 – Flexy 2014-11-05 21:09:25

0

union all一個是一個查詢。這是一個由兩部分組成的查詢。

如果連接到兩個表中的第二個表不產生重複,你也可以這樣做:

select link_table.key as lk_key, table_a.key as a_key, table_b.key as b_key 
from link_table left join 
    table_a 
    on link_table.key = table_a.key_link_table left join 
    table_b 
    on link_table.key = table_b.key_link_table; 

這是不完全等同,因爲如果在多場比賽,可能會產生重複,無論是table_atable_b。但是,就你而言,它可能會做你想要的。