Присоединить таблицу к подзапросу - PullRequest
0 голосов
/ 18 декабря 2018

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

Обновлен SQL ниже.Ошибка:

[Amazon](500310) Invalid operation: invalid reference to FROM-clause entry for table "application_stages";
SELECT t1.*, applications.status, applications.stage_name
FROM application_stages t1
JOIN (
    select application_id, max(exited_on) as exited_on
    from application_stages 
    group by application_id
) t2 
USING (application_id,exited_on)
join applications on application_stages.application_id = applications.id
where application_id in ('91649746', '91991364', '96444221')

Ответы [ 2 ]

0 голосов
/ 18 декабря 2018

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

SELECT s.*, a.status, a.stage_name
FROM application_stages s
JOIN (
    select application_id, max(exited_on) as exited_on
    from application_stages 
    group by application_id
) m 
USING (application_id, exited_on)
JOIN applications a ON a.application_id = s.id
WHERE a.application_id IN ('91649746', '91991364', '96444221')
0 голосов
/ 18 декабря 2018

Используйте для этого оконные функции:

select ast.*, a.status, a.stage_name
from (select ast.*,
             rank() over (partition by application_id order by exited_on desc) as seqnum
      from application_stages ast
     ) ast join
     applications a
     on ast.application_id = a.id
where ast.seqnum = 1 and
      ast.application_id in ('91649746', '91991364', '96444221');

Ваш запрос имеет несколько проблем:

  • application_id в where является неоднозначным
  • application_stages имеет псевдоним t1, поэтому первый не распознается

Обратите внимание, что если application_id - это число (что, я предполагаю, имеет место), то константы не должны иметьодинарные кавычки).

...