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 的城市