有这样一个需求:

  1. 从数据库中查出包含“商品1”和“商品2”的订单;

  2. 从数据库中查出包含“商品1”或“商品2”的订单;

  3. 从数据库中查出仅包含“商品1”和“商品2”的订单;

  4. 从数据库中查出仅包含“商品1”或“商品2”的订单;

这里只用“商品1”、“商品2”举例,可以扩展到多个商品的需求。

涉及到的表大概如下图:

移动开发培训,Android培训,安卓培训,手机开发培训,手机维修培训,手机软件培训

该怎么做呢?以第一点需求为例,一种可行的方法是:先查出所有包含“商品1”的订单,然后遍历这些订单,选出包含“商品2”的订单,如果要查询包含更多商品的订单,需要进行多次遍历,层层筛选,效率低下。况且,在实际情况下,往往需要支持分页查询,这种方式基本不可行,或者实现起来很复杂。

第二种方法是这样的:假设查询包含“商品1”、“商品2”、“商品3”的订单,其goods_id 分别为1、2、3,sql如下:

移动开发培训,Android培训,安卓培训,手机开发培训,手机维修培训,手机软件培训

SELECT * FROM `order` 
WHERE order_id IN ( 
SELECT tmp.order_id 
        
		

网友评论