Как можно улучшить этот запрос?

Как получить список путей до учебных материалов, которые используются только в тестах определенного года из базы данных с двумя таблицами – одна содержит записи о тестах, а другая учебные материалы. Намереваюсь создать два набора данных: 1) идентификаторы записей в таблице с учебными материалами и соответствующие пути; 2) уникальные пути из первого набора. После этого планирую удалить записи об учебных материалах из таблицы и их соответствующие файлы с диска.
  • 14 августа 2024 г. 12:03
Ответы на вопрос 2
Как получить список путей до учебных материалов, которые используются только в тестах определенного года из базы данных с двумя таблицами – одна содержит записи о тестах, а другая учебные материалы. Цель - создать два набора данных: 1) идентификаторы записей в таблице с учебными материалами и соответствующие пути; 2) уникальные пути из первого набора. После этого необходимо удалить записи об учебных материалах из таблицы и их соответствующие файлы с диска.
Поскольку id после группировки может быть несколько, то нужно использовать аггрегатные функции для их получения. В данном случае - GROUP_CONCAT() . 

Ну или, если очень хочется получить каждый id в отдельной строке, можно обернуть ваш запрос в другой:
select * from test_prep_materials where PATH in (
  select tpm.PATH
  from tests as t 
  left join test_prep_materials as tpm on tpm.TID = t.ID
  group by tpm.PATH
  having max(t.YEAR) < 2024 and min(t.YEAR) > 2022
)


P.S. Логичнее, вроде, джойнить тесты к материалам, а не наоборот.
Похожие вопросы