Это вопрос, который меня интересовал уже довольно давно. Я попытаюсь объяснить с помощью примера, но это общий вопрос.
Скажем, у вас есть две таблицы:
- пользователей, которые содержат имя, фамилию, ... пользователя
- записей, которые содержат сообщения, написанные пользователем, с такими полями, как заголовок, текст, ...
Теперь предположим, что я хочу отобразить все сообщения, созданные за последние 24 часа. В этой таблице я хочу отобразить имя, фамилию ... пользователя, создавшего этот пост. Запрос, вероятно, будет выглядеть примерно так:
ВЫБРАТЬ ... ИЗ сообщений, пользователей ГДЕ posts.user_id = users.id И [последние 24 часа]
Теперь перейдем к моему вопросу. Поскольку весьма вероятно, что один пользователь создал несколько сообщений за последние 24 часа, мы в основном получаем его / ее имя, фамилию, ... снова и снова. Другими словами, набор результатов запроса выше содержит повторяющиеся данные (но не повторяющиеся строки).
Не лучше ли:
- ВЫБРАТЬ ... ИЗ сообщений, ГДЕ [последние 24 часа]
- ВЫБРАТЬ ... ОТ пользователей, где ИД ВХОДИТ (ВЫБРАТЬ ОТЛИЧИТЬ user_id ОТ ОТДЕЛОК ГДЕ [последние 24 часа])
- сопоставить результат первого запроса с результатом второго запроса на уровне приложения или в процедуре sql, чтобы узнать имя, фамилию, ... сообщения - это легко сделать, если идентификаторы (первичные ключи ) являются индексом / ключом некоторой хэш-карты, массива или аналогичных элементов.
Я понимаю, что это очень общий вопрос, но любые идеи приветствуются. Спасибо!