在我学习过程中,我已经了解了这种严格的模式,建议我将其关闭,目前我已经关闭了。但是,如果存在严格模式,则肯定有原因。 首先让我展示出现错误的代码
SELECT `first_name`,
`last_name`,
`order_date`,
`amount`
FROM `customers`
JOIN `orders`
ON `customers`.`id` = `orders`.`customer_id`
GROUP BY `orders`.`customer_id`;
我得到了错误代码1055 error image
我被告知,除非汇总,否则我必须使用GROUP BY中的所有字段。
所以应该是这样。
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(),因此我不必再在GROUP BY上使用它,但是order_date
仍然存在。
Since amount is still here
它会显示所有日期选项,我确实知道每个id = id只能有一个日期
为了将来参考,我应该如何以良好的方式使用“严格模式”,还是应该将其关闭?
答案 0 :(得分:1)
在MySQL中通常首选严格模式,因为它可以帮助您避免一些常见的错误,例如该错误。
当您选择GROUP BY
子句中不包含的列且没有任何聚合时,没有严格模式的MySQL 可能会返回任何随机行,并且您不能对将返回哪一行。与其他许多RDBMS一样,严格模式下的MySQL 引发错误,因此您不得不修复查询。
要正确地编写查询,您首先需要确定要获取order_date
和amount
的哪些数据,例如它应该是客户或其他事物的最新订单。