MySql从2个表中选择包含多个子产品的产品

时间:2014-12-21 13:06:16

标签: mysql sql select

我正在尝试从我的网店MySQL数据库中的订单中选择产品。

这是我试图从

获取信息的2个表格的结构

表order_product:
| order_product_id | order_id | product_id | name ___ |型号|数量| price_ | total_ |
| 63072 _________ | 41761__ | 4022____ |产品1 | P001_ | 2 ______ | 23.95 | 47.90 |

order_product_option表:
| order_id | order_product_id | product_product_id | name__ |价格|
| 41761__ | 63072 _________ | 4022 ____________ |选项1 | 0.90_ |
| 41761__ | 63072 _________ | 4022 ____________ |选项2 | 3.25_ |
| 41761__ | 63072 _________ | 4022 ____________ |选项3 | 5.90_ |

我需要在一个概述中使用select查询获取order_product及其所有选项,但我遇到了一个产品的多个选项。

这是我到目前为止所拥有的

(SELECT
`order_product_id`, 
`order_id`,
`product_id`,
`name`,
`model`,
`quantity`,
`price`,
`total`
FROM `order_product`
WHERE `order_id` = 41761)
UNION (SELECT
0 AS order_product_id,
T1.`order_id`,
0 AS product_id,
T1.`name`,
'option' AS model,
T2.`quantity`,
T1.`price`,
SUM(T1.`price` * T2.`quantity`) AS total
FROM `order_product_option` T1
INNER JOIN `order_product` T2 ON T1.`order_product_id` = T2.`order_product_id`
WHERE T1.`order_id` = 41761)

本声明的结果:
| order_product_id | order_id | product_id | name ___ |型号|数量|价格| total__ |
| 63072 _________ | 41761__ | 4022 _____ |产品1 | P001_ | 2_____ | 23.95 | 47.90 |
| 0 _____________ | 41761__ | 0 ________ |选项1_ | option_ | 2_____ | 0.90 | 10.05 |

但我希望结果如下:
| order_product_id | order_id | product_id | name ___ |型号|数量|价格| total__ |
| 63072 _________ | 41761__ | 4022 _____ |产品1 | P001__ | 2_____ | 23.95 | 47.90 |
| 0 _____________ | 41761__ | 0 ________ |选项1_ | option_ | 2_____ | 0.90_ | 1.80_ |
| 0 _____________ | 41761__ | 0 ________ |选项2_ | option_ | 2_____ | 3.25_ | 6.50_ |
| 0 _____________ | 41761__ | 0 ________ |选项3_ | option_ | 2_____ | 5.90_ | 11.80 |

它只选择选项,总价格不正确 如何修复它以便选择价格合适的所有选项?

1 个答案:

答案 0 :(得分:2)

试试这个版本:

(SELECT `order_product_id`, `order_id`, `product_id`, `name`,
        `model`, `quantity`, `price`, `total`
 FROM `order_product`
 WHERE `order_id` = 41761
)
UNION ALL
(SELECT 0 AS order_product_id, T1.`order_id`, 0 AS product_id, T1.`name`,
        'option' AS model, T2.`quantity`, T1.`price`, T1.`price` * T2.`quantity` AS total
 FROM `order_product_option` T1 INNER JOIN
      `order_product` T2
       ON T1.`order_product_id` = T2.`order_product_id`
 WHERE T1.`order_id` = 41761
)

您的查询的问题是第二个子查询具有sum()函数。这会将查询转换为返回一行的聚合查询。您不需要聚合。

顺便说一句,大多数数据库都会生成编译器错误,因为select中有很多列不在group by中(因为你没有group by)。 MySQL扩展了SQL以允许这种构造。