Я пытаюсь изменить свой подзапрос на объединение, где он выбирает только одну запись в подзапросе.Похоже, что для каждого найденного файла запускается подзапрос, выполнение которого занимает более минуты:
select afield1, afield2, (
select top 1 b.field1
from anothertable as b
where b.aForeignKey = a.id
order by field1
) as bfield1
from sometable as a
Если я пытаюсь выбрать только связанные записи, он не знает, как связать a.id ввложенный выбор.
select afield1, afield2, bfield1
from sometable a left join (
select top 1 id, bfield, aForeignKey
from anothertable
where anothertable.aForeignKey = a.id
order by bfield) b on
b.aForeignKey = a.id
-- Results in the multi-part identifier "a.id" could not be bound
Если я жестко закодирую значения во вложенном предложении where, длительность выбора уменьшается с 60 секунд до пяти.Кто-нибудь есть какие-либо предложения о том, как объединить две таблицы, не обрабатывая при этом каждую запись во внутренней таблице?
РЕДАКТИРОВАТЬ:
Я закончил тем, что добавил
left outer join (
select *, row_number() over (partition by / order by) as rank) b on
b.aforeignkey = a.id and b.rank = 1
из~ 50 секунд до 8 для 22M строк.