【问题标题】:Select from two tables mysql in a particular order because the output must have a particular structure以特定顺序从两个表 mysql 中选择,因为输出必须具有特定结构
【发布时间】: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 获得每个供应商的单独总计?

标签: mysql


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-29
    • 2012-05-14
    • 1970-01-01
    相关资源
    最近更新 更多