2012-10-28 29 views
2

如何可以提取从下表中特定束产品订单。例如,如果我想提取产品Wireless Mouse已被用作捆绑产品的所有订单。提取特定束产品订单

期待结果1:

 
    orders_id  product_name  qty  
     1000  Wireless Mouse  1 
     1000  Laptop    1 
     1001  Wireless Mouse  3 
     1001  PC     3 
     1003  Wireless Mouse  4 
     1003  IPAD    4 

第二个问题:

,如果我想只提取产品的订单,其与“无线鼠标”作为包我该怎么办呢?

期待结果2:

 
    orders_id  product_name  qty  
     1000  Laptop    1 
     1001  PC     3  
     1003  IPAD    4 

如果可能的话,请帮我了解以下信息:

,如果我想提取它们与“无线鼠标”,仅使用“笔记本”的订单作为捆绑我该怎么做?

期待结果3:

 
    orders_id  product_name  qty  
     1000  Laptop    1 

实施例的数据:

表1:订单

 
    id customer_id  order_price purchase_date 
    1000 1     203  12/6/2011 
    1001 2     304  12/6/2011 
    1002 1     1000 12/6/2011 
    1003 1     233  12/6/2011 
    1004 1     44  12/7/2011 
    1005 3     50  12/7/2011 
    1006 4     67  12/7/2011 
    1007 5     99  12/7/2011 
    1008 6     299  12/7/2011 
    1009 7     199  12/7/2011 

表2:客户

 

    id email       name 
    1 [email protected]   james 
    2 [email protected]   Ryan 
    3 [email protected]     Sili 
    4 [email protected]    Mame 
    5 [email protected]  Kane 
    6 [email protected]    Kratos 
    7 [email protected]    Kim 

表3:产品

 

    id name 
    1 Laptop 
    2 PC 
    3 Wireless Mouse 
    4 IPAD 
    5 iphone 
    6 Wireless Keyboard 
    7 Printer 
    8 Glaxy S3 
    9 Scanner 
    10 PS3 

表4:product_orders

 
    id  orders_id product_id qty 
     1 1000  1   1 
     2 1000  3   1 
     3 1001  2   3 
     4 1001  3   3 
     5 1003  4   4 
     6 1003  3   4 
     7 1004  5   1 
     8 1005  6   1 
     9 1007  7   2 
     10 1008  8   1 

对不起你们,我今天问太多。

回答

2

对于问题1

号正如你可以看到下面,查询嵌套。

子查询2获取其上有Wireless Mouse的所有orders_id。
子查询1个计数的每个Orders_ID其中Wireless Mouse是本记录的数目。
主查询products_ordersproducts

 
Main Query 
    -- Subquery 1 
    --- Subquery 2 

查询联接子查询。

SELECT aaa.orders_id, bbb.name, aaa.qty 
FROM  products_orders aaa 
     INNER JOIN products bbb 
      ON bbb.id = aaa.product_id 
     INNER JOIN 
      (
      SELECT aa.ORDERS_ID 
      FROM products_orders aa 
        INNER JOIN 
        (
         SELECT orders_id 
         FROM products_orders a 
           INNER JOIN products b 
           ON b.id = a.product_id 
         WHERE name = 'Wireless Mouse' 
        ) bb ON aa.orders_id = bb.orders_id 
      GROUP BY aa.ORDERS_ID 
      HAVING COUNT(*) > 1 
     ) ccc ON aaa.orders_id = ccc.orders_id 
ORDER BY aaa.orders_ID 

对于题目2

Question No 1,你可以在WHERE子句添加附加条件来筛选所有记录而不Wireless Mouse

... 
WHERE bbb.name <> 'Wireless Mouse' 

查询,

SELECT aaa.orders_id, bbb.name, aaa.qty 
FROM  products_orders aaa 
     INNER JOIN products bbb 
      ON bbb.id = aaa.product_id 
     INNER JOIN 
      (
      SELECT aa.ORDERS_ID 
      FROM products_orders aa 
        INNER JOIN 
        (
         SELECT orders_id 
         FROM products_orders a 
           INNER JOIN products b 
           ON b.id = a.product_id 
         WHERE name = 'Wireless Mouse' 
        ) bb ON aa.orders_id = bb.orders_id 
      GROUP BY aa.ORDERS_ID 
      HAVING COUNT(*) > 1 
     ) ccc ON aaa.orders_id = ccc.orders_id 
WHERE bbb.name <> 'Wireless Mouse' 

对于题目3

就像问题2号,添加额外的条件

... 
WHERE bbb.name <> 'Wireless Mouse' AND 
     bbb.name = 'Laptop' 

查询,

SELECT aaa.orders_id, bbb.name, aaa.qty 
FROM  products_orders aaa 
     INNER JOIN products bbb 
      ON bbb.id = aaa.product_id 
     INNER JOIN 
      (
      SELECT aa.ORDERS_ID 
      FROM products_orders aa 
        INNER JOIN 
        (
         SELECT orders_id 
         FROM products_orders a 
           INNER JOIN products b 
           ON b.id = a.product_id 
         WHERE name = 'Wireless Mouse' 
        ) bb ON aa.orders_id = bb.orders_id 
      GROUP BY aa.ORDERS_ID 
      HAVING COUNT(*) > 1 
     ) ccc ON aaa.orders_id = ccc.orders_id 
WHERE bbb.name <> 'Wireless Mouse' AND 
     bbb.name = 'Laptop' 
+0

感谢您的帮助。一件有趣的事是,我不知道<>是“不相等”。我今天从你那里学到了很多东西。再次感谢。 – Anam