gpt4 book ai didi

mysql - 关闭 ONLY_FULL_GROUP_BY 是个好主意吗?

转载 作者:行者123 更新时间:2023-11-29 16:24:14 25 4
gpt4 key购买 nike

我想要获取“订单”表中但不在“客户”表中的客户。 “快速订购”客户。我写了这个查询:

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

我这里有两个选择:

  1. 仅关闭_FULL_GROUP_BY。我知道该怎么做,但这是一个好主意吗?我知道这很有用,但就我而言,如果它打开,我需要重写我的查询
  2. 使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com