有這樣一個需求:

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

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

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

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

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

涉及到的表大概如下圖:

移動開發(fā)培訓(xùn),Android培訓(xùn),安卓培訓(xùn),手機(jī)開發(fā)培訓(xùn),手機(jī)維修培訓(xùn),手機(jī)軟件培訓(xùn)

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

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

移動開發(fā)培訓(xùn),Android培訓(xùn),安卓培訓(xùn),手機(jī)開發(fā)培訓(xùn),手機(jī)維修培訓(xùn),手機(jī)軟件培訓(xùn)

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