Запрос может отличаться в зависимости от того, что вы на самом деле делаете.
Если у вас уже есть CompanyId
и вам нужен только номер телефона, это просто:
select top (1) pn.*
from dbo.CompanyPhoneNumbers pn
where pn.CompanyId = @CompanyId -- A parameter provided externally, by calling code for instance
order by pn.IsPrimary desc;
Однако, если вам нужны данные всех компаний, включая один из их телефонов (например, вы можете создать представление для этого), вам нужен коррелированный подзапрос:
select c.*, oa.*
from dbo.Companies c
outer apply (
select top (1) pn.*
from dbo.CompanyPhoneNumbers pn
where pn.CompanyId = c.Id
order by pn.IsPrimary desc
) oa;
Я намеренно использовал outer
вместо cross
, в противном случае он отфильтрует компании, в которых нет номеров телефонов.