我开始知道这个严格的模式,而在我的课程,我被建议关闭它,我现在做了。但如果严格模式存在的话,肯定是有原因的。首先让我展示一下出错的代码
SELECT `first_name`,
`last_name`,
`order_date`,
`amount`
FROM `customers`
JOIN `orders`
ON `customers`.`id` = `orders`.`customer_id`
GROUP BY `orders`.`customer_id`;
我得到了错误代码1055错误图像
据我所知,我必须使用组中的所有字段。
所以应该是这样。
SELECT `first_name`,
`last_name`,
`order_date`,
`amount`
FROM `customers`
JOIN `orders`
ON `customers`.`id` = `orders`.`customer_id`
GROUP BY `orders`.`customer_id`,`order_date`, 'amount';
代码会“工作”,但它会分组 order_date
还有“数量”,我不想发生。
对于 amount
我必须使用sum(),所以我不必再在groupby上使用它,但是 order_date
仍然存在。
自 amount is still here
它会显示所有的日期选项,我知道每个id=id可能只有一个日期
作为将来的参考,我应该如何很好地使用strict模式,还是应该关闭它?
1条答案
按热度按时间bmp9r5qi1#
一般来说,严格模式在mysql中是首选的,因为它可以帮助您避免一些常见的错误,比如这个错误。
选择未包含在
GROUP BY
没有任何聚合的子句,没有严格模式的mysql可能会返回任何随机行,并且您不能对将返回哪一行做出任何假设。严格模式下的mysql和其他许多rdbms一样,会引发一个错误,因此您必须修复查询。要正确编写查询,首先需要弄清楚要获取哪些数据
order_date
以及amount
--例如,应该是客户的最新订单还是其他订单。