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

Как получить список путей до учебных материалов, которые используются только в тестах определенного года из базы данных с двумя таблицами – одна содержит записи о тестах, а другая учебные материалы. Намереваюсь создать два набора данных: 1) идентификаторы записей в таблице с учебными материалами и соответствующие пути; 2) уникальные пути из первого набора. После этого планирую удалить записи об учебных материалах из таблицы и их соответствующие файлы с диска.
  • 14 августа 2024 г. 12:03
Ответы на вопрос 2
Как получить список путей до учебных материалов, которые используются только в тестах определенного года из базы данных с двумя таблицами – одна содержит записи о тестах, а другая учебные материалы. Цель - создать два набора данных: 1) идентификаторы записей в таблице с учебными материалами и соответствующие пути; 2) уникальные пути из первого набора. После этого необходимо удалить записи об учебных материалах из таблицы и их соответствующие файлы с диска.
Поскольку id после группировки может быть несколько, то нужно использовать аггрегатные функции для их получения. В данном случае - <a href="https://dev.mysql.com/doc/refman/8.4/en/aggregate-functions.html#function_group-concat" rel="nofollow">GROUP_CONCAT()</a> . <br/> <br/> Ну или, если очень хочется получить каждый id в отдельной строке, можно обернуть ваш запрос в другой: <br/> <pre><code class="sql">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) &lt; 2024 and min(t.YEAR) &gt; 2022
)</code></pre> <br/> <br/> P.S. Логичнее, вроде, джойнить тесты к материалам, а не наоборот.
Похожие вопросы