2017-07-18 40 views
2

我目前正試圖從兩個表中輸出我想要加入的輸出,並且似乎我在如何解決此問題上存在一個塊。Table Left加入

表1中的產品具有唯一的ID。

ID | (other info) 
----------------- 
AA | 
BB | 
CC | 

表2具有表1的唯一ID作爲FK以及一個型號和我想加入到表的一部分碼1中。表2具有的其他信息導致的大量以下可能的星座:

ID | FK | model number | part-code 
----------------------------------- 
01 | AA | model0001 | part923 
02 | AA | model0001 | 
03 | AA |    | part923 
04 | BB | model0002 | 
05 | BB |    | part876 
06 | CC |    | part551 

表2中的信息因此非常分散,不一定完整。我也不希望假設對於給定的FK,型號和部件代碼在所有條目中保持不變(如果給定FK有多個變體,我只需要一個條目,即使它是隨機的) 。

我想要實現的結果是獲取我從表1中提取的所有信息,並且它總是會有一個唯一的ID(表2中的= FK),並添加模型編號和部分如果存在,則將代碼添加到表格中而不創建任何重複項。上面的例子應該給出以下輸出。

ID | model number | part-code | (other info from table 1) 
--------------------------------------------------------- 
AA | model0001 | part923 | 
BB | model0002 | part876 | 
CC |    | part551 | 

我還要提到的是,表2是非常大的(數以百萬計的條目),我也沒有辦法,除了用表1所述的ID此表也相當大,以匹配數據 - 的有效方式因此接近這是必要的。 謝謝你的閱讀時間,並幫助我理解如何解決這個問題。 最佳, 喬納斯

回答

1

您是對的,您需要一個OUTER JOIN才能獲得table1中的所有記錄,並在table2中記錄匹配的記錄。

table2獲得每個命中只有一個記錄是棘手的。這個聚合子查詢將產生你想要的輸出。請注意,此解決方案可以生成(model_number,part_code)的排列,table2中的任何單個記錄中都不存在該排列;我猜這沒關係,因爲這是你的樣本結果集顯示的BB。 「數百萬條目」的表現可能會很慢。但這是一個(單獨的)調整問題。

select t1.id 
     , t2.model_number 
     , t2.part_code 
     , t1.whatever 
     , t1.blah 
     , t1.etc 
from table1 t1 
left outer join (select fk 
         , max (model_number) as model_number 
         , max (part_code) as part_code 
        from table2 
        group by fk) t2 
    on t1.id = t2.fk 
order by t1.id 
/
+0

謝謝,這應該起作用了,但是由於過度使用資源,系統在執行時會中止作業。我會盡力找到一種方法來改善這一點! – curzic

0

你可以試試這個SQL

SELECT t1.ID, t2.model_number, t2.part-code FROM table1 t1 
LEFT JOIN table2 t2 ON t1.ID = t2.FK 
GROUP BY t1.ID 

希望幫助!

+0

OP需要表1中的所有信息,而不僅僅是ID。這是否提供了他們? –

+0

這就是我目前正在做的(雖然稍作修改,因爲我需要Paul Karam提到的其他信息)。一個簡單的左連接與分組不起作用,因爲我收到表2中每個FK有多行的實例的重複行。 – curzic