Как добавить в SELECT еще один SELECT TOP 1 по другой таблице

vlsaf

Всем привет.Немного в сторону и начинаю тупить.Есть таблица сотрудников. EmplemplIDemplNameЕсть таблица адресов сотрудников AdradrIDemplIDadrTextКаждый сотрудник может иметь не один адрес, а несколькоВ селекте по сотрудникам надо вытащить первый адрес из таблицы adr
select emplID, emplName, a.adrText 
from Empl as e
left join Adr as a where a.emplID = e.emplID
но так вытащатся все адреса для каждого сотрудника.А нужен только первый попавшийся (это я утрирую)Помогите с запросом.
12 ответов

vlsaf

vlsaf,
select emplID, emplName, (select top <b>1</b> a.adrText from Adr as a where a.emplID = e.emplID)
from Empl as e


vlsaf

select emplID, emplName, 
(select top <b>1</b> a.adrText from Adr as a where a.emplID = e.emplID) 
from Empl as e


vlsaf

И ещё вариантеГ:
select distinct emplID, emplName, a.adrText 
from Empl as e
left join Adr as a where a.emplID = e.emplID


vlsaf

Вау. Большое всем спасибо!!!


vlsaf

2 tpgТока, по моему, distinct не сработает, т.к. адреса разные.


vlsaf

2 tpgТока, по моему, distinct не сработает, т.к. адреса разные.
А... Ну да, ПАРДОН!


vlsaf

2 tpgТока, по моему, distinct не сработает, т.к. адреса разные.
distinct -> max/min


vlsaf

... к тому же в скрипте стартового поста синтаксическая ошибка...
select
	e.emplID
	, e.emplName
	, a.adrText 
from Empl as e
left join
	(
	select
		emplID
		, min(adrText) as adrText
	from Adr
	group by emplID
	) as a on a.emplID = e.emplID


vlsaf

2 tpgэто то, что доктор прописал! А то мне надо дальше объединять таблицы. Но если бы я использовал вариант с Select top1, то дальше шел затык. А так все пошло.Спасибо.


vlsaf

vlsaf,если б версию сервера сказали, ещё десяток решений накидали бы (если она >= SQL2005)


vlsaf

Версия 2008


vlsaf

vlsaf,
select e.emplID, e.emplName, addr.*
from Empl as e
outer apply (select top (<b>1</b>) * from Adr where emplID = e.emplID) addr