2012-01-25 27 views
3

我有3代表具有以下結構:MySQL的加入3和表2個共同屬性

表-A:

  • DateIDA1A2

表-B:

  • DateIDB1

Table_C:

  • DateIDC1C2C3

我想參加所有的三成表屬性:DateIDA1A2B1C1C2C3

對於3代表的一些日期和ID是相同的,但有些則不是,所以我想要做的事就像一個LEFT JOINUNION然後RIGHT JOIN讓我不會失去任何日期和ID的行。看起來我需要日期和ID組合來獲得他們自己的唯一標識符,以便我可以加入表格,但我已經遇到了一個障礙。

+0

聽起來像你想要一個完整的外部連接,不幸的是MySQL不支持它。您使用UNION的想法可能是最好的辦法。檢查這個我們的例子:http://stackoverflow.com/questions/2384298/mysql-full-outer-join-syntax-error – ben

回答

2

您可以試試這個:

SELECT Date, ID, A1, A2, B1, C1, C2, C3 
FROM (
    SELECT Date, ID 
    FROM Table_A 
    UNION 
    SELECT Date, ID 
    FROM Table_B 
    UNION 
    SELECT Date, ID 
    FROM Table_B 
) d 
LEFT JOIN Table_A a on (d.Date=a.Date and d.ID=a.ID) 
LEFT JOIN Table_B b on (d.Date=b.Date and d.ID=b.ID) 
LEFT JOIN Table_C c on (d.Date=c.Date and d.ID=c.ID) 

這應該給你你正在尋找的答案,但我認爲聲明將成爲大型數據集的相當緩慢。

+0

這是我嘗試你的上述建議時不斷得到的錯誤:錯誤代碼:1064 你在您的SQL語法中有錯誤;檢查對應於您的MySQL服務器版本的手冊,以便在'd LEFT JOIN .... – user1170332

+0

附近使用正確的語法來修復錯誤,謝謝指出它(我從subselect表中刪除'dates'別名) –

+0

不幸的是,我的數據集非常大,僅爲Table_A超過300,000行。我停止了一個半小時之前,我查詢了這個查詢。你對可能更快的查詢有任何建議嗎?非常感謝。 – user1170332