Mysql中的GROUP_CONCAT使用

 SELECT
    res.ITRId Id,
    res.ITRResourceName ResourceName,
    res.ITRSupplierName SupplierName,
    res.ITRDeptCityName DeptCityName,
    res.ITRDeptAirportName DeptAirportName,
    res.ITRDataFlag DataFlag,
    res.ITRDeptCityId,
    res.ITRSupplierId,
    res.ITRTcManagerId,
    bus.ITFDestCityName DestCityName,
    bus.ITFDestAirportName DestAirportName,
    city.ITCTransPortCityName
    -- (select GROUP_CONCAT(city.ITCTransPortCityName separator  ',' ) TransportCityName from SGRInternationalTransportCity city where   city.ITCTransportId = res.ITRId) as TransportCityName
    FROM SGRInternationalTransportResources res
    left JOIN SGRInternationalTransportFlightResource bus ON res.ITRId = bus.ITFTransportId
    left JOIN SGRInternationalTransportCity city ON city.ITCTransportId = res.ITRId
    where res.ITRResourceType =2

执行的结果如下:

表联合查询后ID相同的存在多条记录;其他字段值均一样仅ITCTransPortCityName字段值不同;

使用GROUP_CONCAT 优化后:

 SELECT
    res.ITRId Id,
    res.ITRResourceName ResourceName,
    res.ITRSupplierName SupplierName,
    res.ITRDeptCityName DeptCityName,
    res.ITRDeptAirportName DeptAirportName,
    res.ITRDataFlag DataFlag,
    res.ITRDeptCityId,
    res.ITRSupplierId,
    res.ITRTcManagerId,
    bus.ITFDestCityName DestCityName,
    bus.ITFDestAirportName DestAirportName,
    (select GROUP_CONCAT(city.ITCTransPortCityName separator  ',' ) TransportCityName from SGRInternationalTransportCity city where   city.ITCTransportId = res.ITRId) as TransportCityName
    FROM SGRInternationalTransportResources res
    left JOIN SGRInternationalTransportFlightResource bus ON res.ITRId = bus.ITFTransportId
    left JOIN SGRInternationalTransportCity city ON city.ITCTransportId = res.ITRId
    where res.ITRResourceType =2

已经初步得到我们想要的结果了;可结果集还是三条记录,列表呈现依然存在问题...进一步优化如下:

去除:

    left JOIN SGRInternationalTransportCity city ON city.ITCTransportId = res.ITRId

得到结果如下:

如果需要对 ITCTransPortCityName 这个字段进行查询该如何处理?用 like 么?使用 exists 进行处理

 and exists (select 1 from SGRInternationalTransportCity city where res.ITRId = city.ITCTransportId and city.ITCTransPortCityId=226 )    

已成功筛选 城市ID为 226 的城市

原文地址:https://www.cnblogs.com/zhangruiBlog/p/8421417.html