有這樣一個(gè)需求:
從數(shù)據(jù)庫中查出包含“商品1”和“商品2”的訂單;
從數(shù)據(jù)庫中查出包含“商品1”或“商品2”的訂單;
從數(shù)據(jù)庫中查出僅包含“商品1”和“商品2”的訂單;
從數(shù)據(jù)庫中查出僅包含“商品1”或“商品2”的訂單;
這里只用“商品1”、“商品2”舉例,可以擴(kuò)展到多個(gè)商品的需求。
涉及到的表大概如下圖:
該怎么做呢?以第一點(diǎn)需求為例,一種可行的方法是:先查出所有包含“商品1”的訂單,然后遍歷這些訂單,選出包含“商品2”的訂單,如果要查詢包含更多商品的訂單,需要進(jìn)行多次遍歷,層層篩選,效率低下。況且,在實(shí)際情況下,往往需要支持分頁查詢,這種方式基本不可行,或者實(shí)現(xiàn)起來很復(fù)雜。
第二種方法是這樣的:假設(shè)查詢包含“商品1”、“商品2”、“商品3”的訂單,其goods_id 分別為1、2、3,sql如下:
SELECT * FROM `order` WHERE order_id IN ( SELECT tmp.order_id