MySQL嵌套SQL查询:关联orderbook表easy_order为1的execution行
嵌套SQL查询方案:筛选关联订单满足条件的execution记录
没问题,我来帮你搞定这个需求。根据你的表结构,我们需要从execution表中筛选出那些买订单或者卖订单对应的orderbook行中easy_order字段为1的记录。下面是两种符合要求的嵌套SQL写法:
方案一:使用EXISTS子查询(推荐)
这种写法利用MySQL的半连接特性,执行效率更高,适合数据量较大的场景:
SELECT e.* FROM execution e WHERE EXISTS ( -- 检查当前execution的买订单是否满足easy_order=1 SELECT 1 FROM orderbook ob WHERE ob.id = e.buy_order_id AND ob.easy_order = 1 ) OR EXISTS ( -- 检查当前execution的卖订单是否满足easy_order=1 SELECT 1 FROM orderbook ob WHERE ob.id = e.sell_order_id AND ob.easy_order = 1 );
为什么推荐这个写法?
EXISTS是半连接查询,MySQL在子查询中找到第一条匹配的记录后就会停止遍历,不用扫描整个子查询结果集- 只要
orderbook表的id主键上有索引(主键默认自带索引),这个查询的性能会非常好
方案二:使用IN子查询(写法更简洁)
如果你更看重代码的简洁性,也可以用IN子查询实现同样的效果:
SELECT e.* FROM execution e WHERE e.buy_order_id IN ( SELECT id FROM orderbook WHERE easy_order = 1 ) OR e.sell_order_id IN ( SELECT id FROM orderbook WHERE easy_order = 1 );
注意事项
- 当
orderbook表中满足easy_order=1的记录数量很多时,IN子查询可能会先把所有符合条件的id加载到内存中再做匹配,性能略逊于EXISTS - 确保
execution表的buy_order_id和sell_order_id字段上也建立了索引,能进一步提升查询速度
内容的提问来源于stack exchange,提问作者Arefe
相关产品推荐
相关产品推荐

