我想要获取“订单”表中但不在“客户”表中的客户。 “快速订购”客户。我写了这个查询:
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 list contains nonaggregated column (firstname, lastname, telephone, ip) this is incompatible with sql_mode=only_full_group_by
我这里有两个选择:
- 仅关闭_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/