我想让客户位于“订单”表中,但不在“客户”表中。 “快速订购”的客户。我写了这个查询:

SELECT `email`, `firstname` , `lastname`, `telephone`, `ip`, NULL
FROM `order`
WHERE `customer_id` = 0 AND `email` NOT IN (SELECT `email` FROM `ocustomer`)
GROUP BY `email`


但我得到:


  SELECT列表包含非聚合列(名字,姓氏,电话,ip),这是不兼容的
  与sql_mode = only_full_group_by


我在这里有两个选择:


关闭ONLY_FULL_GROUP_BY。我知道该怎么做,但这是个好主意吗?我知道这很有用,但就我而言,如果将其打开,则需要重写查询
使用ANY_VALUE(),但不适用于MariaDb。另一方面,我无法使用聚合函数,因为我有文本字段。因此,我不知道要在此处进行其他哪些更改以使用ONLY_FULL_GROUP_BY。


我很困惑该怎么办?关闭ONLY_FULL_GROUP_BY是个好主意,还是没有ANY_VALUE()的另一种重写我的查询的方法?

最佳答案

关闭它不是一个好主意。它可以帮助您避免会导致错误查询结果的错误。

您可以这样编写查询:

SELECT `email`, `firstname` , `lastname`, `telephone`, `ip`, NULL
FROM `order`
WHERE `customer_id` = 0 AND `email` NOT IN (SELECT `email` FROM `ocustomer`)
GROUP BY `email`, `firstname` , `lastname`, `telephone`, `ip`


如果每封电子邮件有多行具有不同的值,则仍然可以使用聚合函数。不是总和或计数,而是最小和最大工作量。

SELECT `email`, MIN(`firstname`) AS firstname , MIN(`lastname`) AS lastname, /* ... you get the idea */
FROM `order`
WHERE `customer_id` = 0 AND `email` NOT IN (SELECT `email` FROM `ocustomer`)
GROUP BY `email`

关于mysql - 关闭ONLY_FULL_GROUP_BY是个好主意吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54345743/

10-16 06:43