Как использовать GROUP_CONACT и CONCAT в подзапросе mysql - PullRequest
0 голосов
/ 06 августа 2020

Я хочу получить записи таблицы в одинарных кавычках со значениями, разделенными запятыми, и использовать этот вывод как подзапрос внутри основного запроса для получения записей, но мой подзапрос не работает, однако запись двух отдельных запросов работает нормально, но я хочу использовать один запрос вместо двух запросов.

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

Ответы [ 2 ]

1 голос
/ 06 августа 2020

Если формально, то

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

С другой стороны - подзапрос выбирает все даты в указанном диапазоне дат, которые присутствуют в таблице. Внешний запрос выбирает строки, даты которых присутствуют в этом списке, т.е. присутствуют в таблице. Таким образом, будут возвращены ВСЕ строки таблицы в пределах диапазона.

1 голос
/ 06 августа 2020

Вы можете использовать функцию 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() возвращает строку, которая представляет собой список, разделенный запятыми. Если тип данных столбца created_on - DATE, вы можете изменить все DATE(created_on) только на created_on.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...