Вложенный выбор - ошибка, связанная с идентификатором нескольких частей
Я написал следующий запрос, но получаю ошибку, связанную с идентификатором, состоящим из нескольких частей, поскольку я пытаюсь отфильтровать подзапрос, используя значения из первого внутреннего соединения, за пределами подвыбора.
SELECT runners.id, wins
FROM dbHorseRacing.dbo.historic_runners as runners
inner join dbHorseRacing.dbo.historic_races as races on races.race_id = runners.race_id
inner join (
select ru.runner_id, count(*) as wins
FROM dbHorseRacing.dbo.historic_runners as ru
inner join dbHorseRacing.dbo.historic_races as ra on ra.race_id = ru.race_id
where ru.runner_id = runners.runner_id
and ra.meeting_date < races.meeting_date
and ru.finish_position = 1
group by ru.runner_id
) w on w.runner_id = runners.runner_id
следующие две строки вызывают проблему:
where ru.runner_id = runners.runner_id
and ra.meeting_date < races.meeting_date
Я пытался написать этот запрос другими способами, но безуспешно, я видел, как другие люди использовали вложенный выбор, ссылаясь на идентификаторы вне вложенного выбора...
Является ли то, что я пытаюсь сделать, вообще неправильно, как принцип? Если так, есть ли другой способ, которым я мог бы достичь этого?
Я попытался найти ответ и был бы очень признателен за любую помощь!
Лаура
2 ответа
Попробуй это:
SELECT runners.id, (
select count(*)
FROM dbHorseRacing.dbo.historic_races
where historic_races.runner_id = runners.runner_id
and historic_races.meeting_date < races.meeting_date
and ru.finish_position = 1
) wins
FROM dbHorseRacing.dbo.historic_runners as runners
inner join dbHorseRacing.dbo.historic_races as races on races.race_id = runners.race_id
Приведенный ниже запрос будет работать, так как вы не поделились своими результатами, поэтому я просто отредактировал версию запроса
SELECT runners.id, wins
FROM dbHorseRacing.dbo.historic_runners as runners
inner join dbHorseRacing.dbo.historic_races as races on races.race_id = runners.race_id
inner join (
select ru.runner_id, count(*) as wins
FROM dbHorseRacing.dbo.historic_runners as ru
inner join dbHorseRacing.dbo.historic_races as ra on ra.race_id = ru.race_id
where ru.finish_position = 1
group by ru.runner_id
) w on w.runner_id = runners.runner_id