以特定顺序从两个表 mysql 中选择,因为输出必须具有特定结构

Posted

技术标签:

【中文标题】以特定顺序从两个表 mysql 中选择,因为输出必须具有特定结构【英文标题】:Select from two tables mysql in a particular order because the output must have a particular structure 【发布时间】:2021-07-12 18:23:21 【问题描述】:

我有一种特殊情况,我必须以特定顺序从两个表中选择特定列。以下是供应商的表格

vid company mno phone
1 Xoxoxo MTN 2459999999
2 Vovovo MTN 2459998888
3 Yrewmi Vodafone 2459997777

这是 order_content 表。

oid vendor_id amount
2 2 2
2 1 4
2 1 7
3 1 1

我想为特定的 ordercontent.oid 选择 vendor.company、vendor.mno、SUM(order_content.amount)、vendor.phone,只选择涉及的供应商。我想从供应商表中获取供应商详细信息并总结特定订单的金额。假设订单 2 是 old = 2

SELECT DISTINCT vendor.company AS customerName, vendor.mno, SUM(orders_content.price) AS amount 
FROM orders_content, vendor 
WHERE orders_content.oid = 2 
GROUP BY orders_content.oid;

我期待的结果

customerName mno amount phone description reference
Vooxoo MTN 2 2459998888 orders 154013949
Xoxoxo MTN 11 2459999999 orders 78793949

【问题讨论】:

您尚未指定两个表之间的关系,因此您将获得两个表的完整叉积。你应该使用 ANSI JOIN 语法,这很难忘记。 由于订单有多个供应商,您希望结果中的哪一个? 你不能指望同时得到不同供应商的同时得到同一个订单的SUM!我在这里看到的最好的,除了金额的总和之外,您还可以获得供应商的数量。 请发布预期结果。 也许您希望GROUP BY orders_content.oid, vendor.vid 获得每个供应商的单独总计? 【参考方案1】:

您需要指定表之间的连接条件,并按vid 分组,而不是oid。您不需要按oid 分组,因为WHERE 子句限制为单个订单。

SELECT vendor.company AS customerName, vendor.mno, SUM(orders_content.price) AS amount
FROM vendor
JOIN orders_content ON orders_content.vendor_id = vendor.vid
WHERE orders_content.oid = 2
GROUP BY vendor.vid

【讨论】:

以上是关于以特定顺序从两个表 mysql 中选择,因为输出必须具有特定结构的主要内容,如果未能解决你的问题,请参考以下文章

MySQL:以特定顺序连接两个表的不同行?

mysql:左连接但从连接表中选择一个特定项目

如何使用mysql从图像表中获取总数?

使用 Python 将特定列数据从 CSV 导入不同的 MYSQL 表

在 MySQL 中从其中一个表中选择 MAX(differ_key) 来连接特定键上的 2 个表 [重复]

如何以特定顺序多次显示mysql记录