2014-10-28 180 views
0

假設這是可能的,我正在尋找一種方法(MYSQL查詢)來連接表中沒有任何返回的值重複。我想加入三張表(A,B,C)。這三個表中的公共列是user_id。 user_id在表A中將是唯一的 - 用戶在表A中將只有一行/記錄。但是,表B中的user_id將不唯一。C - 用戶可能在兩個表中有多個記錄/行B & C. I已經試過INNER,LEFT,和RIGHT JOINS,以及UNION然而,它重複從表A的結果爲:匹配從表B & C.需要一個mysql查詢建議

Row 1: Value1(from A)  Value1(from B)  Value1(from C) 
Row 2: Value1(from A)  Value2(from B)  Value2(from C) 
Row 3: Value1(from A)  Value3(from B)  Value3(from C) 

我想避免這種結果。相反,我寧願:

Row 1: Value1(from A)  Value1(from B)  Value1(from C) 
           Value2(from B)  Value2(from C) 
           Value3(from B)  Value3(from C) 
Row 2: Value2(from A)  Value1(from B)  Value1(from C) 
           Value2(from B)  Value2(from C) 
           Value3(from B)  Value3(from C) 

在此先感謝您的任何幫助。

+0

可能出現[預先在連接上選擇不同記錄](http://stackoverflow.com/questions/2068515/select-distinct-records-on-a-join) – undefined 2014-10-28 21:45:27

+3

的重複。你有顯示問題,而不是查詢問題。 – 2014-10-28 21:45:36

+0

爲您的問題提供答案的一個問題是可能存在未確定的列數。你知道是否可以事先知道表B和C中任意用戶的行數是否受到合理限制的限制? – 2014-10-28 21:54:07

回答

0

如果你的主要興趣是在以各行返回所有在B和C的其他值,而你並沒有大驚小怪的列數,那麼下面可能是有用的:

SELECT A. F1,GROUP_CONCAT(B.F1)AS all_b_F1,GROUP_CONCAT(C.F1)AS all_c_F1 FROM A INNER JOIN B USING(user_id)INNER JOIN C USING(user_id)ORDER BY A.F1;

請注意,由於您未指定它們,因此我已經創建了字段名稱。您可以爲B和C中的其他字段添加其他GROUP_CONCAT列,或者在當前查詢中一起添加CONCAT或CONCAT_WS以代替B.F1。

取決於你想要對結果做什麼,這個查詢可能是足夠好的。例如,您可以在PHP中分解all_b_F1以獲取個體值,或者使用FIELDS ENCLOSED BY''將查詢結果從MySQL導出到csv,以便在將csv導入到Excel中時,B和C中的每個值都獲得它們自己的單元格。