mysql GROUP CONCAT 未返回值
mysql GROUP CONCAT not returning values
这是我的查询
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())
上面的查询 return 当我 运行 在终端中查询此查询时为空
当我在它下面使用子查询时 returns 数据
SELECT GROUP_CONCAT(CAST(id AS SIGNED)) AS ids FROM users WHERE team_id = 92)
以上查询 returns
'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())
它return我的价值。
为什么它不能使用子查询请帮忙
这不是你想要的:
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
这是我的查询
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())
上面的查询 return 当我 运行 在终端中查询此查询时为空
当我在它下面使用子查询时 returns 数据
SELECT GROUP_CONCAT(CAST(id AS SIGNED)) AS ids FROM users WHERE team_id = 92)
以上查询 returns
'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())
它return我的价值。 为什么它不能使用子查询请帮忙
这不是你想要的:
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