Присоединить таблицу к подзапросу

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

Обновленный 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')
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
0
90
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

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 - это число (что, как я предполагаю, так и есть), то константы не должны иметь одинарных кавычек).

Спасибо, @Gordon Linoff. Можно ли настроить исходный запрос без преобразования в функцию Windows? Я добавлю имя таблицы в application_id и уберу одинарные кавычки из application_ids.

WilsonS 18.12.2018 19:27

@WilsonS. . . Для этого настоятельно рекомендуются оконные функции.

Gordon Linoff 18.12.2018 23:34
Ответ принят как подходящий

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

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')

Другие вопросы по теме