有這樣一個需求:

  1. 從數(shù)據(jù)庫中查出包含“商品1”和“商品2”的訂單;

  2. 從數(shù)據(jù)庫中查出包含“商品1”或“商品2”的訂單;

  3. 從數(shù)據(jù)庫中查出僅包含“商品1”和“商品2”的訂單;

  4. 從數(shù)據(jù)庫中查出僅包含“商品1”或“商品2”的訂單;

這里只用“商品1”、“商品2”舉例,可以擴展到多個商品的需求。

涉及到的表大概如下圖:

photoshop培訓,電腦培訓,電腦維修培訓,移動軟件開發(fā)培訓,網站設計培訓,網站建設培訓

該怎么做呢?以第一點需求為例,一種可行的方法是:先查出所有包含“商品1”的訂單,然后遍歷這些訂單,選出包含“商品2”的訂單,如果要查詢包含更多商品的訂單,需要進行多次遍歷,層層篩選,效率低下。況且,在實際情況下,往往需要支持分頁查詢,這種方式基本不可行,或者實現(xiàn)起來很復雜。

第二種方法是這樣的:假設查詢包含“商品1”、“商品2”、“商品3”的訂單,其goods_id 分別為1、2、3,sql如下:

photoshop培訓,電腦培訓,電腦維修培訓,移動軟件開發(fā)培訓,網站設計培訓,網站建設培訓

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