我编写了一个查询,从没有任何子项的表中获取项。工作正常,但速度很慢。有没有更好的/更简单的/优化的方法来写同样的东西?
select distinct id, (select count(i.item_id) from order_item as i where i.parent_item_id = o.item_id) as c
from order_item as o
where product_type = 'bundle'
having c = 0
order by id desc
limit 10;
这些领域中很少有人能得到结构的概念
Table: order_item
Columns:
item_id PK
order_id
parent_item_id
product_id
product_type
item_id | order_id | parent_item_id | product_id | product_type
-----------------------------------------------------------------
1 | 1 | null | 1 | bundle
2 | 1 | 1 | 2 | simple
3 | 1 | 1 | 3 | simple
4 | 1 | null | 4 | bundle
5 | 2 | null | 1 | bundle
6 | 2 | 5 | 2 | simple
7 | 2 | 5 | 3 | simple
查询只应返回第4项
2条答案
按热度按时间yjghlzjz1#
试试下面。还要考虑在上创建索引
PARENT_ITEM_ID
以及ITEM_ID
```SELECT OI.*
FROM ORDER_ITEM OI
LEFT JOIN ORDER_ITEM OI2
ON OI2.PARENT_ITEM_ID = OI.ITEM_ID
WHERE OI.PRODUCT_TYPE = 'bundle' AND OI2.PARENT_ITEM_ID IS NULL
8oomwypt2#
我建议
not exists
:为了提高性能,您需要一个索引
order_item(parent_item_id, product_type)
.注意:我不确定您是否想要
product_type
子查询中的筛选器,但它是您的查询所使用的逻辑。