mysql SELECT多对多GROUP_CONCAT(如何获取所有记录)

时间:2016-11-22 11:55:04

标签: mysql sql

这是我的第一个问题,如果我的标题不是很好且具有描述性,那就很抱歉。

所以我有很多关系的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查询示例。

1 个答案:

答案 0 :(得分: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是不必要的。