Мне нужно выборочно получать данные из двух таблиц, которые имеют отношение 1 ко многим. Ниже приведен упрощенный пример.
Таблица A представляет собой список событий:
Id | TimeStamp | EventTypeId
--------------------------------
1 | 10:26... | 12
2 | 11:31... | 13
3 | 14:56... | 12
Таблица B - это список свойств для событий. Различные типы событий имеют разное количество свойств. Некоторые типы событий вообще не имеют свойств:
EventId | Property | Value
------------------------------
1 | 1 | dog
1 | 2 | cat
3 | 1 | mazda
3 | 2 | honda
3 | 3 | toyota
Существует ряд условий, которые я буду применять при извлечении данных, однако все они вращаются вокруг таблицы A. Например, мне могут потребоваться только события определенного дня или только события определенного типа.
Мне кажется, у меня есть два варианта получения данных:
Вариант 1
Выполните два запроса: сначала запросите таблицу A (с предложением WHERE) и сохраните где-нибудь данные, затем запросите таблицу B (объединение с таблицей A, чтобы использовать то же предложение WHERE) и «заполните пробелы» в данных, которые я извлек из таблица А.
Для этого параметра требуется, чтобы SQL Server выполнил 2 поиска в таблице A. Однако полученные 2 набора данных не содержат повторяющихся данных.
Вариант 2
Выполните один запрос, соединив таблицу A с таблицей B с помощью LEFT JOIN.
Эта опция требует только одного поиска в таблице A, но результирующий набор данных будет содержать много дублированных значений.
Заключение
Есть ли «правильный» способ сделать это, или мне нужно попробовать оба способа и посмотреть, какой из них быстрее?