0

我有以下查询:

SELECT f.flight_number, f.flight_date, f.airport, a.iata, a.iso3166 AS airport_country_code, air.icao
        FROM flights_database f
        LEFT JOIN airlines air ON air.name = f.airline
        JOIN airports a ON f.airport = a.airportNameClean
        WHERE f.flight_date
        BETWEEN DATE_SUB(CURDATE(), INTERVAL 1 DAY) AND DATE_ADD(CURDATE() , INTERVAL 1 DAY)
        GROUP by f.flight_date, f.airport, f.flight_number, a.iata
        ORDER by f.airport, f.flight_number

现在我已经升级了 MySQL 并且only_full_group_by setting被激活了。此查询不再以这种形式工作:

Expression #6 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'air.ICAO' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

当然,我可以禁用此设置,但我知道引入此设置是有原因的。简单地添加icaoGROUP BY子句会引入不同的结果。

如何在启用此设置的情况下重写此查询以实现相同的行为?

4

1 回答 1

1

你不能简单地做max(icao)吗?

SELECT f.flight_number, f.flight_date, f.airport, a.iata, a.iso3166 AS airport_country_code, max(air.icao)
        FROM flights_database f
        LEFT JOIN airlines air ON air.name = f.airline
        JOIN airports a ON f.airport = a.airportNameClean
        WHERE f.flight_date
        BETWEEN DATE_SUB(CURDATE(), INTERVAL 1 DAY) AND DATE_ADD(CURDATE() , INTERVAL 1 DAY)
        GROUP by f.flight_date, f.airport, f.flight_number, a.iata
        ORDER by f.airport, f.flight_number
于 2016-05-13T10:51:01.277 回答