Я на 99% уверен, что этот вопрос задавался 100 раз, но я не могу найти что-нибудь на SO о том, как лучше всего это сделать.
У меня есть таблица с именем People, затем таблицаназывается Jobs, в котором хранится вся их история трудоустройства.
При создании отчетов, сводных панелей и т. д. он встречается довольно часто, где мы хотим перечислить каждого человека и его последние 3 вакансии (например):
Джон Смит
- Некоторая компания, 4/3 / 2011-5 / 14/2011
- Другая компания, 3/12 / 2010-4 / 1/2011
- Другая компания, 8/1 / 2009-1 / 4/2010
Салли Смитерс
- Некоторая компания, 4/3 / 2011-5 / 14 /2011
- Другая компания, 3/12 / 2010-4 / 1/2011
- Другая компания, 8/1 / 2009-1 / 4/2010
И т. Д.
Какой-то псевдокод VBish:
SELECT PersonID, Name FROM People
Do While datareaderPeople.Read()
Response.write(datareaderPeople("Name")
'SELECT TOP 3 PersonID, JobID, CompanyName, OtherFields FROM Jobs WHERE PersonID = datareaderPeople("PersonID") ORDER BY SomeDateField
Do While datareaderJobs.Read()
Response.write(datareaderJobs("CompanyName"))
End While
End While
Как вы можете видеть, в настоящее время мы делаем еще один запрос, чтобы получить задания для каждого человека, пока мы перебираем людей.Есть лучший способ сделать это?Этот способ кажется неэффективным и создает много запросов к базе данных.
Или, если кто-то может указать мне на этот вопрос, заданный ранее, это тоже было бы хорошо.
Спасибо.
Edit: Я использую описанный выше метод, потому что мне нужно иметь возможность делать что-то с полями Jobs для каждой строки Jobs, которую я получаю обратно.Например, форматирование даты, выделение жирным шрифтом названия компании и т. Д. Просто вернуть одну большую строку с полями Джобса, объединенными в одну большую строку, не получится.