2016-11-22 82 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

谢谢先生,这是完美的工作。我也删除了不同的。 –

相关问题