如何在 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 行。
我想用逗号分隔值检索 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 行。