Обычно вы выбираете продукты из таблицы продуктов, а затем проверяете, есть ли для них расширенная запись в таблице шагов рабочего процесса. Это делается с помощью IN
или EXISTS
.
select
product_id,
name,
case when product_id in
(select product_id from workflow_steps where workflow = 'extended')
then 'yes'
else 'no'
end as extended
from products
order by product_id;
. Это позволяет избежать необходимости читать все строки из (возможно, большой) таблицы шагов рабочего процесса. Эта таблица должна иметь индекс по двум интересующим нас столбцам, чтобы поиск происходил быстро. Думаю, порядок двух столбцов не должен иметь значения, но вы можете быть осторожны и создать оба индекса. Затем в плане выполнения запроса проверьте, какой индекс используется, и отбросьте другой:
create index idx1 on workflow_steps(product_id, workflow);
create index idx2 on workflow_steps(workflow, product_id);