我正在更新一个旧网站,但其中一个查询不再起作用:
SELECT * FROM tbl WHERE col1 IS NULL GROUP BY col2 ORDER BY col2
我注意到如果我放弃了GROUP BY
它的工作原理,但结果集与原始集不匹配:
SELECT * FROM tbl WHERE col1 IS NULL ORDER BY col2
所以我尝试GROUP BY
在文档中阅读以查看可能是什么问题,它似乎建议不要使用*
来选择所有字段,而是明确使用列名,所以我只使用正在排序和分组的列进行尝试:
SELECT col2 FROM tbl WHERE col1 IS NULL GROUP BY col2 ORDER BY col2
哪个有效,但是在查看代码后,查询需要查询中的 2 列,因此无论添加的*
是谁都做得过火,但是如果我添加该列会产生错误,同样添加第三列会产生相同的错误:
SELECT col2, col3 FROM tbl WHERE col1 IS NULL GROUP BY col2 ORDER BY col2
SELECT col1, col2, col3 FROM tbl WHERE col1 IS NULL GROUP BY col2 ORDER BY col2
谁能告诉我为什么最后一个查询不起作用?我无法从文档中解读原因,但这是获得所需结果集所需的最少查询。
在Adminer中运行查询我得到这个错误
Error in query (1055): Expression #2 of SELECT list is not in GROUP BY
clause and contains nonaggregated column 'name.table.column'
which is not functionally dependent on columns in GROUP BY clause; this is
incompatible with sql_mode=only_full_group_by