假设现在有这两个表:

1.订单表:t_order

order_id title creat_time
1 张三的订单 2024-01-01
2 李四的订单 2024-03-01

2.订单明细表:t_order_detail

order_id item_type_id item_type item_name
1 01 电子产品 电脑
1 01 电子产品 手机
1 02 办公用品 记事本
2 01 电子产品 鼠标
2 02 办公用品 鼠标垫

比如我要查到既有买 电子产品电脑 也有买 办公用品记事本 的订单 t_order 的记录,也就是:

item_type_id = '01' and item_name = '电脑' 且 item_type_id = '02' and item_name = '记事本'

这样的订单。

我尝试过搜索有推荐使用 group by + having 的方式进行查询的。类似如下的写法:

SELECT o.order_id
FROM t_order o
JOIN t_order_detail od ON o.order_id = od.order_id
GROUP BY o.order_id
HAVING COUNT(CASE WHEN od.item_type_id = '01' AND od.item_name = '电脑' THEN 1 end) > 0 
	and COUNT(CASE WHEN od.item_type_id = '02' AND od.item_name = '记事本' THEN 1 end) > 0

但是由于我实际的场景下,数据量会比较大,而且涉及的关联表也会比较多,使用 group by 会导致特别特别慢。所以想请教下有没有更好的方法。

举报· 109 次点击
登录 注册 站外分享
快来抢沙发
0 条回复  
返回顶部