2

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

预期结果1:

    orders_id product_name 数量    
       1000无线鼠标1
       1000 笔记本电脑 1
       1001无线鼠标3
       1001 个人电脑 3
       1003无线鼠标4
       1003 平板电脑 4

第二个问题:

如果我只想提取与“无线鼠标”一起使用的产品订单作为捆绑包,我该怎么做?

预期结果 2:

    orders_id product_name 数量    
       1000 笔记本电脑 1
       1001 个人电脑 3     
       1003 平板电脑 4

如果可能的话,请帮助我解决以下问题:

如果我只想提取与“无线鼠标”一起使用的“笔记本电脑”订单作为捆绑包,我该怎么做?

预期结果 3:

    orders_id product_name 数量    
       1000 笔记本电脑 1  

示例数据:

表一:订单

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

表二:客户

    身份证电子邮件名称
    1 aa@dealboard.com.au 詹姆斯
    2 bb@dealboard.com.au 瑞安
    3 cc@live.com.au 思力
    4 dd@acgglobal.com 妈妈
    5 ee.heinrich@det.nsw.edu.au 凯恩
    6 ff@optusnet.com.au 奎托斯
    7 ssy@hotmail.com 金

表 3:产品

    身份证名称
    1 台笔记本电脑
    2 台电脑
    3 无线鼠标
    4 平板电脑
    5 苹果手机
    6 无线键盘
    7 打印机
    8 银河 S3
    9 扫描仪
    10 PS3

表 4:product_orders

    id orders_id product_id 数量
        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

对不起各位,我今天问的太多了。

4

1 回答 1

2

对于问题 1

如下所示,查询是嵌套的。

子查询 2获取其上的所有 orders_id Wireless Mouse
子查询 1计算每个存在的记录Orders_IDWireless Mouse
主查询products_orders和连接子查询products

主要查询
  -- 子查询 1
     --- 子查询 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 题

From 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'
于 2012-10-28T02:09:29.327 回答