如何在 mysql 子查询中使用 GROUP_CONACT 和 CONCAT

How to use GROUP_CONACT and CONCAT in mysql sub query

我想用逗号分隔值检索 table 单引号中的记录,并使用此输出作为主查询中的子查询来获取记录,但我的子查询不起作用但是单独编写两个查询工作正常,但是我想使用单个查询而不是两个查询。

Mysql 查询以逗号分隔获取单引号值:

SELECT GROUP_CONCAT(DISTINCT (CONCAT('''', date(created_on), '''' ))) as 
 strengths FROM table WHERE created_on BETWEEN '2020-08-01' AND '2020-08-04'

输出:

'2020-08-01','2020-08-03'

预期输出相同但使用 mysql 子查询:(以下查询未检索记录)

 SELECT * FROM `report` where created_on in (SELECT GROUP_CONCAT(DISTINCT 
   (CONCAT('''', date(created_on), '''' ))) FROM report WHERE created_on BETWEEN 
   '2020-08-01' AND '2020-08-04') order by created_on

您可以使用函数 FIND_IN_SET():

SELECT * FROM report 
WHERE FIND_IN_SET(
        CONCAT('''', DATE(created_on), '''' ), 
        (SELECT GROUP_CONCAT(DISTINCT CONCAT('''', DATE(created_on), '''' )) FROM report WHERE DATE(created_on) BETWEEN '2020-08-01' AND '2020-08-04')
      ) 

因为 GROUP_CONCAT() returns 一个字符串,它是一个逗号分隔的列表。
如果该列的 created_on 数据类型是 DATE,那么您可以将所有 DATE(created_on) 更改为仅 created_on.

如果正式做的话

SELECT * 
FROM report 
WHERE FIND_IN_SET( DATE(created_on), 
                   ( SELECT GROUP_CONCAT(DISTINCT DATE(created_on)) 
                     FROM report 
                     WHERE created_on BETWEEN '2020-08-01' AND '2020-08-04' 
                   )
                 ) 
ORDER BY created_on

从另一方面 - 子查询选择指定日期范围内的所有日期,这些日期出现在 table 中。外部查询选择日期存在于此列表中的行,即存在于 table 中。因此将返回范围内的所有 table 行。