【发布时间】:2012-10-16 08:51:59
【问题描述】:
请帮助我编写一个 SQL 查询以从下表中提取唯一订单。为此,我准备了一个 SQL 查询。它工作正常,但在某些地方它返回一些重复的行,因为一些订单有多个产品。
例如:
客户可以在一个订单中购买“IPAD”。但是,如果他们捆绑购买“Ipad”和“Android”,他们将获得 50% 的折扣,并且可以省钱。在这种情况下,我们将在 1 个订单下获得两种产品。但是,客户将作为一种产品付款(即 120 美元)。为了正确分配订单,我们为额外的产品创建了一个额外的行(如果产品有两个)。如果 bundle 包含三个产品,它将在“product_orders”表中分别创建三行。
多个产品的示例“product_orders”表:
id orders_id product_id qty
1 3 2 1
2 2 1 1
3 3 3 1
请查看上面的示例表,捆绑订单的一个 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 products on product_orders.product_id=products._id
INNER JOIN customers on orders.customer_id =customers.id
Result of the above query:**
Id order_price purchase_date email qty name
3 20 12/6/2011 aa@gmail.com 1 Ipad
3 20 12/6/2011 aa@gmail.com 1 Android
1 40 10/5/2011 bb@gmail.com 2 Laser hair remover
要求的结果:
删除重复的订单 ID
Id order_price purchase_date email qty name
3 20 12/6/2011 aa@gmail.com 1 Ipad
1 40 10/5/2011 bb@gmail.com 2 Laser hair remover
表 1:订单
id customer_id order_price purchase_date
1 1 0.20 12/6/2011
2 2 0.20 12/6/2011
3 1 0.20 12/6/2011
4 1 0.20 12/6/2011
5 1 0.20 12/7/2011
6 3 199.00 12/7/2011
7 4 199.00 12/7/2011
8 5 199.00 12/7/2011
9 6 199.00 12/7/2011
10 7 199.00 12/7/2011
表 2:客户
id email name
1 aa@dealboard.com.au aa
2 bb@dealboard.com.au bb
3 cc@live.com.au cc
4 dd@acgglobal.com dd
5 ee.heinrich@det.nsw.edu.au ee
6 ff@optusnet.com.au ff
7 ssy@hotmail.com ss
表 3:产品
id name
1 A Home Portable Laser Hair Remover
2 Ipad
3 android
4 Asus
5 s
6 10 inch Android
7 A Fabric Steamer Cleaner
8 A Magnetic Fly Screen Door
9 pillopw
10 LCD
表 4:product_orders
id orders_id product_id qty
1 1 1 1
2 3 3 1
3 3 4 1
4 4 1 1
5 4 2 1
6 6 1 1
7 7 1 1
8 4 2 1
9 4 3 1
10 10 1 1
请帮我从“product_orders”表中只提取 1 个订单,查询将省略其他额外的行
【问题讨论】: