我发现 MySQL 在ONLY_FULL_GROUP_BY
启用模式时似乎有问题,并且查询包含 a HAVING
,它指的是来自不同表的具有相同名称的分组列。
这是复制问题的架构:
CREATE TABLE t1 (c1 INT, c2 INT);
CREATE TABLE t2 (c1 INT, c2 INT);
Run Code Online (Sandbox Code Playgroud)
您需要添加ONLY_FULL_GROUP_BY
到您的 SQL 模式:
SET SESSION SQL_MODE='STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION,ONLY_FULL_GROUP_BY'
Run Code Online (Sandbox Code Playgroud)
这是创建错误的查询:
SELECT t1.c1, t2.c1
FROM t1, t2
GROUP BY t1.c1, t2.c1
HAVING t1.c1 > 1 AND t2.c1 > 1;
Run Code Online (Sandbox Code Playgroud)
错误内容:
HAVING 子句中使用了非分组字段“c1”
双方t1.c1
并t2.c1
进行分组,所以我看不出有什么不对这个查询。
此外,如果查询引用同一个表中的不同列名,则查询有效。例如:
SELECT t1.c1, t2.c2
FROM t1, t2
GROUP BY t1.c1, t2.c2
HAVING t1.c1 > 1 AND t2.c2 > 1;
Run Code Online (Sandbox Code Playgroud)
难道我做错了什么?我在任何地方都找不到有关此问题的报告。我可以在 Ubuntu 上的 …