MySql从2个表中选择具有多个子产品的产品
我正在尝试从我的webshop MySQL数据库中的订单中选择产品 这是我试图从中获取信息的两个表的结构 表订购产品:MySql从2个表中选择具有多个子产品的产品,mysql,sql,select,Mysql,Sql,Select,我正在尝试从我的webshop MySQL数据库中的订单中选择产品 这是我试图从中获取信息的两个表的结构 表订购产品: |订单|产品|标识|订单|标识|产品|标识|名称|型号|数量|价格|总价| |63072 | uuuuuuuuuuuuuuu124; 41761 u124; 4022 uuu124;产品1 | P001 | 2 u124; uuuu124; 23.95 | 47.90 | 订单/产品/选项表: |订单号|订单号|产品号|产品号|名称|价格| |41761 uuu124; 630
|订单|产品|标识|订单|标识|产品|标识|名称|型号|数量|价格|总价|
|63072 | uuuuuuuuuuuuuuu124; 41761 u124; 4022 uuu124;产品1 | P001 | 2 u124; uuuu124; 23.95 | 47.90 |
订单/产品/选项表:
|订单号|订单号|产品号|产品号|名称|价格|
|41761 uuu124; 63072 uuuuuuuuuuu124; 4022 uuuuuuuuuuuuu124;选项1 | 0.90 124;
|41761?63072?4022?选项2?3.25?
|41761?63072?4022?选项3?5.90?
我需要使用select查询在一个概览中获取order_产品及其所有选项,但我无法使用一个产品的多个选项 这就是我目前所拥有的
(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)
本声明的结果:|订单|产品|标识|订单|标识|产品|标识|名称|型号|数量|价格|总计| |
|63072 | | | | | | 41761 | | 4022 | |产品1 | P001 | 2 | | | 23.95 | 47.90 |
|0 uuuuuuuuuuuuuuuuuuuuuu124; 41761 uu124; 0 uuuuuuuuu124;选项1 124;选项2 uuuuuuu124; 0.90 | 10.05 |
但我希望结果是:
|订单|产品|标识|订单|标识|产品|标识|名称|型号|数量|价格|总计| |
|63072 | | | | | | 41761 | | 4022 | | |产品1 | P001 | | 2 | | | 23.95 | 47.90 |
|0 uuuuuuuuuuuuuuuuuuuuuu124; 41761 uu124; 0 uuuuuuuuu124;选项1 124;选项2 uuuuuu124; 0.90 124; 1.80 124;
|0 uuuuuuuuuuuuuuuuuuuu124; 41761 uu124; 0 uuuuuuuuu124;选项2 124;选项2 u124; uuuuu124; 3.25 124; 6.50 124;
|0uuuuuuuuuuuuuuuuuuuuu124; 417610uuuuuuuuuuu124;选项3选项2uuuuuuu124; 5.9011.80 |
它只选择on选项,总价不正确。
如何修复它,使其以正确的价格选择所有选项?尝试此版本:
(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
中有许多列不在groupby
中(因为没有groupby
)。MySQL扩展了SQL以允许这种构造。是!成功了。非常感谢你!