Task Livecoding SQL N Last News With Comments

21. Получение последних N новостей и всех их комментариев #

Условие задачи:
📌 Написать один SQL-запрос, который вернёт N последних новостей из таблицы news вместе со всеми их комментариями из таблицы comments.

  • Таблица news имеет поля: id (integer auto_increment).
  • Таблица comments имеет поля: id (integer auto_increment), news_id (integer).
Спойлеры к решению
Подсказки
💡 Можно воспользоваться подзапросом, который выбирает последние N новостей, а затем выполнить LEFT JOIN с таблицей 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.

🔥 Оба решения позволяют получить нужные данные одним запросом, эффективно комбинируя новости и их комментарии!