MySql 从 2 个表中选择具有多个子产品的产品

标签 mysql sql select

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

这是我试图从中获取信息的 2 个表的结构

表order_product:
| order_product_id |订单编号 |产品编号 |名字___ |型号 |数量 |价格_ |总计_ |
| 63072________| 41761__ | 4022____ |产品 1 | P001_| 2______| 23.95 | 47.90 |

order_product_option表:
|订单编号 | order_product_id | product_product_id |姓名__ |价格 |
| 41761__| 63072________| 4022____________|选项 1 | 0.90_|
| 41761__| 63072________| 4022____________|选项 2 | 3.25_|
| 41761__| 63072________| 4022____________|选项 3 | 5.90_|

我需要通过一个选择查询在一个概览中获取 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 |订单编号 |产品编号 |名字___ |型号 |数量 |价格 |总计__|
| 63072________| 41761__| 4022_____|产品 1 | P001_| 2____ | 23.95 | 47.90 |
| 0______________ | 41761__| 0________|选项 1_ |选项_| 2____ | 0.90 | 10.05 |

但我希望结果是:
| order_product_id |订单编号 |产品编号 |名字___ |型号 |数量 |价格 |总计__|
| 63072________| 41761__| 4022_____|产品 1 | P001__| 2____ | 23.95 | 47.90 |
| 0______________ | 41761__| 0________|选项 1_ |选项_| 2____ | 0.90_ | 1.80_ |
| 0______________ | 41761__| 0________|选项 2_ |选项_| 2____ | 3.25_ | 6.50_ |
| 0______________ | 41761__| 0________|选项 3_ |选项_| 2____ | 5.90_ | 11.80 |

只选了option,总价不对。
我该如何修复它,以便它以正确的价格选择所有选项?

最佳答案

试试这个版本:

(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 中(因为您没有分组依据)。 MySQL 已扩展 SQL 以允许此构造。

关于MySql 从 2 个表中选择具有多个子产品的产品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27589649/

相关文章:

php - 复杂子计算的MySQL语法

javascript - AngularJS - 选择 - 服务器调用的默认值

java - 将 ArrayList 添加到 SQL 数据库? (文件管理)

php - 为多个查询创建分页

mysql - MySQL中如何随机选择列和满足条件的行

c# - 在 C# 循环中调用 SQL 存储过程时处理事务

mysql - 错误号 : 1137 Can't reopen table: 'd'

sql - 从另一个没有数据的表的结构创建表

java - MyBatis中设置空参数时不添加jdbcType有什么解决办法吗?

c# - Linq使用案例