2

次の表から特定のバンドル製品の注文を抽出するにはどうすればよいですか。たとえば、商品Wireless Mouseがバンドル商品として使用されているすべての注文を抽出したい場合です。

期待される結果1:

    orders_id product_name qty    
       1000ワイヤレスマウス1
       1000ノートパソコン1
       1001ワイヤレスマウス3
       1001 PC 3
       1003ワイヤレスマウス4
       1003 IPAD 4

2番目の質問:

「ワイヤレスマウス」をバンドルとして使用している製品の注文のみを抽出したい場合、どうすればよいですか?

期待される結果2:

    orders_id product_name qty    
       1000ノートパソコン1
       1001 PC 3     
       1003 IPAD 4

可能であれば、次のことについて私を助けてください:

「ワイヤレスマウス」でバンドルとして使用されている「ラップトップ」の注文のみを抽出したい場合、どうすればよいですか?

期待される結果3:

    orders_id product_name qty    
       1000ノートパソコン1  

データ例:

表1:注文

    id customer_id order_price Purchase_date
    1000 12032011年12月6日
    100123042011年12月6日
    1002 110002011年12月6日
    1003 12332011年12月6日
    1004 1442011年12月7日
    1005 3502011年12月7日
    1006 4672011年12月7日
    1007 5992011年12月7日
    100862992011年12月7日
    100971992011年12月7日

表2:顧客

    IDメール名
    1 aa@dealboard.com.au james
    2bb@dealboard.com.auライアン
    3 cc@live.com.au Sili
    4dd@acgglobal.comマメ
    5ee.heinrich@det.nsw.edu.auケイン
    6 ff@optusnet.com.au Kratos
    7ssy@hotmail.comキム

表3:製品

    ID名
    1台のラップトップ
    2台のPC
    3ワイヤレスマウス
    4 IPAD
    5 iphone
    6ワイヤレスキーボード
    7プリンター
    8 Glaxy S3
    9スキャナー
    10 PS3

表4:product_orders

    idorders_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

申し訳ありませんが、今日は質問が多すぎます。

4

1 に答える 1

2

質問1の場合

以下に示すように、クエリはネストされています。

サブクエリ2は、それに含まれるすべてのorders_idを取得しWireless Mouseます。
サブクエリ1Orders_IDは、存在する各レコードの数をカウントしWireless 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の場合

から、句にQuestion No 1追加条件を追加するだけで、すべてのレコードをフィルタリングできます。WHEREWireless 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 に答える