■以前的认知 (基本知识,完全正确)
・使用GROUP BY 语句时,SELECT中的项目,必须在GROUP BY 中出现
SELECT
a, b, c
FROM
table1
GROUP BY
a, b, c
・或者和聚合函数一起使用 (一般都是这么使用)
SELECT
a, b, sum(c)
FROM
table1
GROUP BY
a, b
■遇到的状况
今天调查代码时,发现了下面这样的代码。
以下的代码中,运行时,应该报错。
可是,实际在mysql中运行,没有报错。
SELECT
a, b, c
FROM
table1
GROUP BY
a, b
此时,C如果有多个值,那么应该返回下列查询中的第一个值。
(条件a,b的值是,对应GROUP BY 中a, b 的值)
SELECT
c
FROM
table1
WHERE
a=XXX,b=XXX
■原因
sql_mode 中,没有 ONLY_FULL_GROUP_BY
■查看 sql_mode
select @@sql_mode;
—
ONLY_FULL_GROUP_BY
—
https://blog.csdn.net/ljz1315/article/details/84890254
—
■总结
虽然mysql有它的特殊之处,我们最好还是按照正常的套路来写代码。
下面的写法虽然不出错,但是 取得 的 c 的值是不确定的,
因此,这种写法,是创造bug的绝佳写法!
SELECT
a, b, c
FROM
table1
GROUP BY
a, b
—
本文地址:https://blog.csdn.net/sxzlc/article/details/107168895