MySQL. Как объединить строки по ID?

Рейтинг: 0Ответов: 1Опубликовано: 26.01.2023

Помогите пожалуйста, я новичок в SQL.

Есть две таблицы, YC_records и YC_services, структура такая:

YC_records

YC_records

YC_services

YC_services

Я делаю вот такой запрос:

SELECT COUNT(`YC_records`.`id`) FROM `YC_records` 
LEFT JOIN `YC_services` ON `YC_records`.`id`=`YC_services`.`record_id` 
WHERE `YC_services`.`title` NOT LIKE "" and `YC_services`.`title` NOT LIKE '%Отраб%' 
and `YC_records`.`create_date` BETWEEN "2022-12-01" and "2023-02-01" 
and `YC_records`.`company_id`=292435;

На выходе я получаю большее кол-во записей, чем на самом деле. Это связано с тем, что к одной записи (YC_records.id) может быть привязано несколько услуг (YC_services.id), и при объединении происходит дубликация записей. Как мне доработать запрос так, чтобы на выходе записи (YC_records.id) объединялись по ID?

Результат запроса с SELECT * для наглядности. Мне надо чтобы сначала прошла фильтрация по title, а потом уже объединилось всё по ID, значение title неважно после фильтрации

Результат запроса с SELECT *

Ответы

▲ 0Принят

Решил проблему, добавив DISTINCT в COUNT

SELECT COUNT(DISTINCT(`YC_records`.`id`)) 
FROM `YC_records` 
LEFT JOIN `YC_services` 
ON `YC_records`.`id`=`YC_services`.`record_id` 
WHERE `YC_services`.`title` NOT LIKE "" and `YC_services`.`title` NOT LIKE "%Отраб%" 
and `YC_records`.`create_date` BETWEEN "2022-12-01" and "2023-02-01" 
and `YC_records`.`company_id`=292435;