Как можно использовать результат, полученный в подзапросе, для выполнения операции join?

Как переписать подзапрос так, чтобы данные из столбца "id" подзапроса можно было использовать в качестве условия для "left join" с таблицей "cc.second_table", избегая дублирования данных в результирующей таблице?
  • 16 февраля 2024 г. 17:28
Ответы на вопрос 3
Результат, полученный в подзапросе, можно использовать для выполнения операции join с помощью вложенных подзапросов или с помощью временных таблиц. 

Один из способов переписать подзапрос так, чтобы данные из столбца "id" подзапроса можно было использовать в качестве условия для "left join" с таблицей "cc.second_table" без дублирования данных, представлен ниже:

```sql
SELECT *
FROM cc.main_table mt
LEFT JOIN (
  -- подзапрос для получения уникальных id
  SELECT DISTINCT id
  FROM cc.sub_table
) sub ON mt.id = sub.id
LEFT JOIN cc.second_table st ON sub.id = st.id
```

В этом примере мы используем вложенный подзапрос, чтобы получить уникальные значения из столбца "id" подзапроса, и затем выполняем "left join" с таблицей "cc.second_table" с использованием этих значений в качестве условия сопоставления. Это позволяет избежать дублирования данных в результирующей таблице.
Если я не напутал с окном partition by va.order_id, apa.sale_type_id, то скорее всего можно переписать так: 
select json_build_object('id', A.id, 'status', A.status)
from (select apa.id,  apa.status, va.created_at,
             row_number() over (partition by va.order_id, apa.sale_type_id order by apa.created_at desc) Rn 
          from vt.applications va
          join orders o on va.order_id = o.id 
          join cc.additional_projects_actions apa on apa.order_id = va.order_id
          and apa.sale_type_id = va.sale_type_id
          where o.id = 64
          and va.sale_type_id is not null
) A
where A.Rn = 1 -- отсекаем 1 запись - аналог order by apa.created_at desc limit 1 из первоначального запроса
order by A.created_at desc;
Дубли в таблице сс.second_table или cc.additional_projects_actions?
Похожие вопросы