0
4

3 回答 3

2

添加额外subquery内容,每次只能获得一种产品order_id

Select 
    orders.id, 
    orders.order_price, 
    orders.purchase_date,
    customers.email, 
    product_orders.qty, 
    products.name 
from 
    orders 
    INNER JOIN product_orders on orders.id=product_orders.orders_id 
    INNER JOIN
    (
        SELECT orders_id, MIN(Product_ID) prodID
        FROM product_orders
        GROUP BY orders_id
    ) c ON product_orders.orders_ID = c.orders_id AND
            product_orders.Product_ID = c.prodID
    INNER JOIN products on product_orders.product_id=products.id 
    INNER JOIN customers on orders.customer_id =customers.id

SQLFiddle 演示

于 2012-10-16T09:03:46.667 回答
1

您需要三个新表:

Bundles (ID, Name)

BundleProducts (BundleID, ProductID)

OrderLines (ID, OrderID, ProductID, BundleID, Qty)

假设 Bundles 包含:

ID    Name
1     IPad & Android

并且 BundleProducts 包含

BundleID    ProductID
1           2
1           3

然后,当客户将产品添加到他们的订单中时,您将 ProductID 插入 OrderLines 表中。如果他们添加了一个 Bundle,则将其插入 BundleID。订单完成后,您可以使用填充了 Product_ID 的 OrderLines 表中的每个产品填充 Product_Orders 表,如果填充了 ProductLines.BundleID,还使用 ​​BundleProducts 表中的每个 ProductID。

或者,您可以将捆绑包本身制作成产品。这意味着您不需要 Bundles 表,但仍需要 BundleProducts 表。此外,您不需要 OrderLines 中的 BundleID 列。因此,“Ipad & Android Bundle”成为 Products 表中的新产品。

订单完成后,您将执行以下操作:

INSERT INTO 
    Product_Orders (Orders_id, Product_ID, Qty)
SELECT
    Orders.ID,
    COALESCE(BundleProducts.ProductID, OrderLines.ProductID),
    OrderLines.Qty
FROM
    Orders
    INNER JOIN OrderLines ON Orders.ID = OrderLines.Orders_ID
    LEFT JOIN BundleProducts ON OrderLines.ProductID = BundleLines.BundleID
于 2012-10-16T09:44:29.160 回答
0
Select orders.id, orders.order_price, orders.purchase_date, customers.email, product_orders.qty, products.name 
from orders 
INNER JOIN product_orders on orders.id=product_orders.orders_id 
INNER JOIN products on product_orders.product_id=products._id 
INNER JOIN customers on orders.customer_id =customers.id
GROUP BY orders.id

添加 GROUP BY orders.id

于 2012-10-16T08:57:42.200 回答