Я пытаюсь получить все товары в заказах типа «назначенный». Но что-то не так с моим sql, я думаю, что where orders.id in ()
проблема. Но я не могу понять, как это сделать.
Товары находятся во многих заказах с разным типом (назначенный, списанный, обслуживаемый). Мне нужно отфильтровать продукты в последних заказах типа «назначено», за исключением «услуги».
select `products`.`id` from `products`
inner join `orders_products` on `products`.`id` = `orders_products`.`product_id`
inner join `orders` on `orders_products`.`order_id` = `orders`.`id`
where orders.id in (
select MAX(order_id) from `orders_products`
where `product_id` = products.id
)
and `orders`.`type_id` in (
select `id` from `order_types` where `code` in ('assigned')
)
group by products.id
Пример данных
order_types
[
{id: 1, code: "assigned"},
{id: 2, code: "retired"},
{id: 3, code: "service"},
]
товары
[
{id: 1},
{id: 2},
{id: 3},
{id: 4},
{id: 5}
]
заказы
[
{id: 1, type_id: 1}, // assigned
{id: 2, type_id: 3}, // service
{id: 3, type_id: 3}, // service
{id: 4, type_id: 2}, // retired
{id: 5, type_id: 1}, // assigned
{id: 6, type_id: 3}, // service
{id: 7, type_id: 3}, // service
]
orders_products
[
{order_id: 1, product_id: 1}, <--
{order_id: 2, product_id: 1},
{order_id: 3, product_id: 2},
{order_id: 4, product_id: 3},
{order_id: 5, product_id: 4}, <--
{order_id: 6, product_id: 4},
{order_id: 7, product_id: 5},
]
Поиск результатов
SQL должен вернуть идентификатор продукта 1, 4