自最新更新以来,我收到以下错误消息:
无法运行查询:SQLSTATE [42000]:语法错误或访问冲突:1055 SELECT列表的表达式#2不在GROUP BY子句中,并且包含非聚合列'table ...',该列在功能上不依赖于其中的列GROUP BY子句;这与sql_mode = only_full_group_by
不兼容
我已经阅读了有关此问题的信息,可以找到的线程是删除模式“ only_full_group_by”
现在,这是最佳做法,还是我应该更改代码?
如果我想使用mySQL默认值,查询将如何显示?
查询
$query = "SELECT es.datum, es.objekt_element, es.anteckn, es.objekt_nr
FROM element_skanning es
INNER JOIN
(
SELECT objekt_element, anteckn, MIN(datum) AS min_datum
FROM element_skanning
WHERE datum LIKE '$this_year_month'
GROUP BY objekt_element
HAVING COUNT(*) > 1
)
dup ON es.objekt_element = dup.objekt_element
ORDER BY dup.min_datum, es.objekt_element, es.datum;
";
答案 0 :(得分:1)
您可以通过简单地从内部查询的anteckn
列表中删除SELECT
来修复查询。该值未使用,因此不会影响您的结果:
$query = "SELECT es.datum, es.objekt_element, es.anteckn, es.objekt_nr
FROM element_skanning es
INNER JOIN
(
SELECT objekt_element, MIN(datum) AS min_datum
FROM element_skanning
WHERE datum LIKE '$this_year_month'
GROUP BY objekt_element
HAVING COUNT(*) > 1
)
dup ON es.objekt_element = dup.objekt_element
ORDER BY dup.min_datum, es.objekt_element, es.datum;
";
请注意,您还将希望包含
es.datum = dup.min_datum
在JOIN
条件下,如果(如显示的那样)您只想从element_skanning
获取与datum
的最小值相对应的行。