SELECT u.*, p.name as plan, COUNT(m.user_id) as totalprojects
FROM users u
LEFT JOIN plans p ON p.id = u.access
LEFT JOIN members m ON m.user_id = u.id
WHERE u.email = 'email address';
所以我有上面的内容,并且我在 Mac 上运行 MySQL 并尝试执行
set global sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION, ONLY_FULL_GROUP_BY';
这说的是
Query OK, 0 rows affected (0.00 sec)
SELECT @@sql_mode
显示
+------------------------------------------------------------------------------------------------------------------------+
| @@sql_mode |
+------------------------------------------------------------------------------------------------------------------------+
| STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
最佳答案
是的。上述查询与 sql_mode=only_full_group_by 不兼容。如果启用了 only_full_group_by,则必须提及在 GROUP BY 子句中选择的所有列。这里没有任何 GROUP BY 子句,并且也使用聚合函数 (COUNT)。理想情况下,如果启用了 only_full_group_by,则此查询应该失败。默认情况下,从 MySQL 5.7 开始启用此功能。
请引用https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html了解详情
关于MySQL 这与 sql_mode=only_full_group_by 不兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45351160/