2016-11-22 32 views
0

這是我的第一個問題,如果我的標題不是很好並且描述性不好,我很抱歉。mysql SELECT多對多GROUP_CONCAT(如何獲取所有記錄)

所以我有這個mysql查詢多對多關係,它工作正常,我得到的驅動程序和它的單位格式,我想要的。

select 
    d.*, 
    group_concat(DISTINCT u.make,'-', u.model) 
from 
    drivers d 
    left join drivers_units dc 
     on d.driver_id = dc.driverId 
    left join units u 
     on dc.unitId = u.unit_id 

我在這裏的問題是,我沒有得到所有驅動程序我只得到至少具有一個單位我明白爲什麼(因爲司機不driver_units表存在),我的問題這裏是驅動程序:

什麼是最好的方式來獲得所有驅動程序(有和沒有任何單位),我可以做一個查詢(返回所有驅動程序無主,如果他們有單位或不)或我必須創建新的查詢選擇驅動程序沒有單位?

我將不勝感激mysql查詢示例。

+0

請提供樣本數據和期望的輸出..它可以幫助我們給你準確的解決方案 –

+0

我認爲,問題是'DISTINCT'在你的group_concat中。過濾條目。也許你有小提琴? –

+0

它工作沒有DISTINCT,下面有答案,無論如何謝謝你的回答,我很感激。 –

回答

1

由於您具有聚合功能(group_concat()),但沒有group by,所以查詢出了問題。你的查詢應該只返回一行。

要獲得所有驅動程序,使用適當的聚合:

select d.*, 
     group_concat(distinct u.make,'-', u.model) 
from drivers d left join 
    drivers_units dc 
    on d.driver_id = dc.driverId left join 
    units u 
    on dc.unitId = u.unit_id 
group by d.driver_id; 

我猜測的distinct是不必要的。

+0

謝謝先生,這是完美的工作。我也刪除了不同的。 –

相關問題