2013-10-12 55 views
1

感謝您的幫助我被困在這個問題上。 讓我來解釋一下,我有這種表格,Table1和Table2。獲取基於重複ID(s)的所有值 - mysql

表1

 
-------| 
id  | 
-------| 
100 | 
101 | 
102 | 
103 | 
104 | 
105 | 

表2

 
-------|---------| 
id  |value | 
-------|---------| 
100 | A  | 
100 | B  | 
100 | C  | 
101 | D  | 
105 | E  | 
105 | F  | 

期望的結果:

 
-------|--------- 
id  |value  
-------|--------- 
100 | A B C  
101 | D 
102 | 
103 | 
104 | 
105 | E F  
+3

使用'LEFT JOIN'和'GROUP_CONCAT'。 – Barmar

+1

@Barmar - 這是值得回答的問題 –

+1

@EdHeal這更像是他自己能做到的暗示。我不認爲這是一個真正的答案。 – Barmar

回答

2
 
SELECT table1.id, 
GROUP_CONCAT(table2.value ORDER BY value ASC SEPARATOR ' ') value 
FROM table1 
LEFT JOIN table2 ON table2.id = table1.id 
GROUP BY table1.id 

其結果將是這樣的:

 
id  value 
-------------- 
100  A B C 
101  D 
102  NULL 
103  NULL 
104  NULL 
105  E F 

如果喲想刪除NULL值

 

SELECT 
    table1.id, 
    GROUP_CONCAT(
    COALESCE(table2.value, '') 
    ORDER BY VALUE ASC SEPARATOR ' ' 
) VALUE 
FROM 
    table1 
    LEFT JOIN table2 
    ON table2.id = table1.id 
GROUP BY table1.id 

決賽結果:

 
id  value 
-------------- 
100  A B C 
101  D 
102  
103  
104  
105  E F 
+0

+1用於刪除NULL值。 – Cyclonecode

1

你應該能夠做到這一點使用GROUP_CONCAT

SELECT table2.id, GROUP_CONCAT(table2.value ORDER BY value ASC SEPARATOR ' ') value 
FROM table2 
LEFT JOIN table1 ON table1.id = table2.id 
GROUP BY table1.id 
+0

但它只返回3行100,101和105 –

+0

@SanchuabaciesAba - 不,它不應該返回所有行。 – Cyclonecode