mysql - mysql GROUP CONCAT不返回值
问题描述
这是我的查询
SELECT
SUM(o.order_disc + o.order_disc_vat) AS manualsale
FROM
orders o
WHERE
o.order_flag IN (0 , 2, 3)
AND o.order_status = '1'
AND (o.assign_sale_id IN (SELECT GROUP_CONCAT(CAST(id AS SIGNED)) AS ids FROM users WHERE team_id = 92))
AND DATE(o.payment_on) = DATE(NOW())
当我在终端中运行此查询时,上面的查询返回 null
当我在下面使用子查询时,它会返回数据
SELECT GROUP_CONCAT(CAST(id AS SIGNED)) AS ids FROM users WHERE team_id = 92)
上面的查询返回
'106,124,142,179'
当我运行我的第一个查询时,如下所示
SELECT
SUM(o.order_disc + o.order_disc_vat) AS manualsale
FROM
orders o
WHERE
o.order_flag IN (0 , 2, 3)
AND o.order_status = '1'
AND (o.assign_sale_id IN (106,124,142,179))
AND DATE(o.payment_on) = DATE(NOW())
它返回我的价值。为什么它不适用于子查询请帮助
解决方案
这不符合您的要求:
AND (o.assign_sale_id IN (SELECT GROUP_CONCAT(CAST(id AS SIGNED)) AS ids FROM users WHERE team_id = 92))
这会将单个值与逗号分隔的值列表进行比较,因此它永远不会匹配(除非给定团队的用户中只有一行)。
您可以将其表述为:
AND assign_sale_id IN (SELECT id FROM users WHERE team_id = 92)
但这可能会更有效地表达为exists
:
AND EXISTS(SELECT 1 FROM users u WHERE u.team_id = 92 AND u.id = o.assign_sale_id)
旁注:我还建议重写此条件:
AND DATE(o.payment_on) = DATE(NOW())
以下,可以利用索引:
AND o.payment_on >= current_date AND o.payment_on < current_date + interval 1 day
推荐阅读
- flask - 如何使用 GET/POST 将 GET 发送到烧瓶
- computation-theory - 计算以下代码的代码复杂度
- llvm - clang-tidy 未能通过错误检查
- mysql - Mysql 查询匹配以检查查询是否已更新
- oracle - 如何使用 pl/sql 从用户输入的日期中提取月份
- php - 如何在laravel的db中存储带有问题及其具体答案的数组
- c# - IEnumerable.Count() 方法花费太多时间
- tensorflow - 使用张量流时的一维卷积误差
- django - DjangoRestFramework_JWT 忽略自定义有效载荷处理程序中的有效载荷
- android - 如何使用底部导航菜单处理屏幕旋转,其中每个菜单都引用一个带有有限选项卡的新查看器(3-4)?我正在使用 ViewModel