2017-04-19 42 views
1

我已經加入了2個表並使用組concat來獲取某些彩色數據。下面是我的查詢。這返回相同的行兩次與2個連接表查詢結果一起使用的MySQL組concat重複

SELECT GROUP_CONCAT( vehicles.role ORDER BY vehicles.id ASC SEPARATOR '\n') as role,GROUP_CONCAT( vehicles.size ORDER BY vehicles.id ASC SEPARATOR '\n') as size,festivals.id,festivals.ref_no as ref_no, festivals.camping,festivals.tour_mgr_name,festivals.email,festivals.mobile,festivals.name_address, GROUP_CONCAT(namedesgs.name ORDER BY namedesgs.id ASC SEPARATOR '\n') as names,GROUP_CONCAT(namedesgs.designation ORDER BY namedesgs.id ASC SEPARATOR '\n') as designations 
FROM festivals 
    LEFT JOIN namedesgs ON festivals.id = namedesgs.festival 
    LEFT JOIN vehicles ON festivals.id = vehicles.festival 
Group BY festivals.id 

請教如何獲取沒有重複的數據?

當我用concat的DISTINCT。它不爲以下

前工作:

namedesg數據

enter image description here

車輛數據

enter image description here

電流輸出

但是在我輸出的維基數據上重複了3次,即使有一個數據存在。

這裏查詢我試圖

SELECT t.id, GROUP_CONCAT(a.name SEPARATOR '\n') as name, 
GROUP_CONCAT(a.designation SEPARATOR '\n') as desg ,GROUP_CONCAT(b.role SEPARATOR '\n') as role, 
GROUP_CONCAT(b.size SEPARATOR '\n') as size 
FROM festivals t 
LEFT JOIN namedesgs a ON a.festival=t.id 
LEFT JOIN vehicles b ON b.festival=t.id 
where t.id=4 
GROUP BY t.id 


festivals 

id ref_no 
1 AAA 
2 BBB 
3 CCC 

namedesgs 

id name designation festival(festival table id) 
1 ann SE    1 
2 ben AE    1 
3 Jan cook   1 
4 alun cook   1 
5 hej hik   2 
6 nij AE    1 

vehicles 

id role size festival(festival table id) 
1 r1 14    1 
2 r1 12    1 
3 r2 12    1 
4 r3 12    1 
5 r4 12   2 

我想作爲了說就是

festivalid name designations role size 
1   ann SE   r1 14 
      ben AE   r1 12 
      jan cook   r2 12 
      alun cook  r3 12 
      aij AE   
2   hej hik   r4 12 
+1

在'GROUP_CONCAT'中使用'DISTINCT'來移除重複項。 – Barmar

+0

@Barmar:我也使用過它GROUP_CONCAT(DISTINCT vehicles.size ORDER BY vehicles.id ASC SEPARATOR'\ n'但是當數據有重複的時候,它也會刪除它,看到我的表格的附加圖像,當我使用DISTINCT時,它會只返回'desg6',即使認爲有兩個在表中。請諮詢 –

+0

@Barmar:請檢查我的問題的更新部分。 –

回答

1

你想要的東西,你不能把namedesignation,並rolesize,在結果中有單獨的列。在使用GROUP_CONCAT之前,您需要將它們連接起來。並使用DISTINCT刪除重複項。

SELECT t.id AS festivalid, 
     GROUP_CONCAT(DISTINCT CONCAT(a.name, ' ', a.designation) SEPARATOR '\n') AS `name designations`, 
     GROUP_CONCAT(DISTINCT CONCAT(b.role, ' ', b.size) SEPARATOR '\n') AS `role size` 
FROM festivals AS t 
LEFT JOIN namedesgs a ON a.festival=t.id 
LEFT JOIN vehicles b ON b.festival=t.id 
GROUP BY t.id 
+0

仍然複製。與我的'當前輸出'圖像相同 –

+0

請參閱上面的問題。我不明白你是如何將'namedesgs'和'vehicles'表中的行關聯到同一行結果上的。 – Barmar

+0

感謝它的作品。偉大的幫助隊友 –