Вложенный выбор - ошибка, связанная с идентификатором нескольких частей

Я написал следующий запрос, но получаю ошибку, связанную с идентификатором, состоящим из нескольких частей, поскольку я пытаюсь отфильтровать подзапрос, используя значения из первого внутреннего соединения, за пределами подвыбора.

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
Другие вопросы по тегам