21. Получение последних N новостей и всех их комментариев #
Условие задачи:
📌 Написать один SQL-запрос, который вернёт N последних новостей из таблицы news
вместе со всеми их комментариями из таблицы comments
.
- Таблица
news
имеет поля:id
(integer auto_increment). - Таблица
comments
имеет поля:id
(integer auto_increment),news_id
(integer).
Спойлеры к решению
Подсказки
💡 Можно воспользоваться подзапросом, который выбирает последние N новостей, а затем выполнить LEFT JOIN с таблицей
💡 Альтернативный вариант — использовать CTE (Common Table Expression) для отбора последних новостей, а затем присоединить к ним комментарии.
comments
для получения всех комментариев к выбранным новостям.💡 Альтернативный вариант — использовать CTE (Common Table Expression) для отбора последних новостей, а затем присоединить к ним комментарии.
Решение
-- Решение 1: Использование подзапроса с LEFT JOIN
SELECT n.*, c.*
FROM (
SELECT *
FROM news
ORDER BY id DESC
LIMIT N -- подставьте нужное количество новостей
) n
LEFT JOIN comments c ON n.id = c.news_id;
-- Решение 2: Использование CTE (Common Table Expression)
WITH latest_news AS (
SELECT *
FROM news
ORDER BY id DESC
LIMIT N -- подставьте нужное количество новостей
)
SELECT ln.*, c.*
FROM latest_news ln
LEFT JOIN comments c ON ln.id = c.news_id;
✅ Объяснение решения:
Решение 1:
Подзапрос
n
выбирает последние N записей из таблицыnews
, сортируя их по убываниюid
.LEFT JOIN с таблицей
comments
позволяет получить все комментарии, относящиеся к каждой новости.
Решение 2:
CTE
latest_news
определяется для выбора последних N новостей.Основной запрос присоединяет комментарии по полю
news_id
, связывая их с новостями из CTE.
🔥 Оба решения позволяют получить нужные данные одним запросом, эффективно комбинируя новости и их комментарии!