【问题标题】:Using an INNER JOIN in a SELECT clause returning incorrect values在 SELECT 子句中使用 INNER JOIN 返回不正确的值
【发布时间】:2019-11-19 12:44:57
【问题描述】:

我在使用 INNER JOIN 函数从两个表中读取正确数据时遇到问题。我要做的是计算每个国家/地区的仓库成本表中的出站成本伙伴列的平均值。该值应插入到表 Warehouse 中的相应国家/地区。 我直接上代码:

    UPDATE 
        Warehouse
    INNER JOIN
        `warehouse-cost-table`
    ON  
        Warehouse.`location-tariff-code` = LEFT(`warehouse-cost-table`.`country`,2)
    SET 
        Warehouse.`outbound-cost-pal` = 
        (
        SELECT cost.`average`
        FROM (SELECT * FROM Warehouse) AS wh
        INNER JOIN (
          SELECT  `warehouse-cost-table`.`country`,
          AVG(`warehouse-cost-table`.`outbound-cost-pal`) AS `average`
          FROM    `warehouse-cost-table` 
          GROUP BY `warehouse-cost-table`.`country`

                    ) cost

        ON wh.`location-tariff-code` = LEFT(cost.`country`,2)
        LIMIT 1
        )
    ;

我一直在使用的两个表的结构是这样的:

仓库

    |----------------------|-------------------|
    | location-tariff-code | outbound-cost-pal |
    |----------------------|-------------------|
    |          CN          |                   |
    |          JP          |                   |
    |----------------------|-------------------|

仓库成本表

    |----------------------|-------------------|-------------------|
    |        country       |    Warehouse-id   | outbound-cost-pal |
    |----------------------|-------------------|-------------------|
    |      CN / China      |         97        |         1         |
    |      CN / China      |         98        |         2         |
    |      CN / China      |         99        |         3         |
    |      JP / Japan      |         197       |         10        |
    |      JP / Japan      |         198       |         11        |
    |      JP / Japan      |         199       |         12        |
    |----------------------|-------------------|-------------------|

预期的结果只是:

仓库

    |----------------------|-------------------|
    | location-tariff-code | outbound-cost-pal |
    |----------------------|-------------------|
    |          CN          |          2        |
    |          JP          |          11       |
    |----------------------|-------------------|

我的猜测是,在 INNER JOIN 函数中使用 select 语句会返回导致错误的多个值(国家和平均值)。为避免出现错误消息,我插入了 LIMIT 1 以不收到错误消息。我无法仅使用一个选择语句(平均)来编写此内容。 跳过 LIMIT 1 语句会返回“子查询返回超过 1 行”。

我的方法是否太复杂而无法开始?

【问题讨论】:

标签: mysql join average


【解决方案1】:

查看您的代码和您可以使用的代码示例

 UPDATE Warehouse w
 INNER JOIN (
  SELECT  LEFT(`warehouse-cost-table`.`country`,2) my_country,
  AVG(`warehouse-cost-table`.`outbound-cost-pal`) AS `average`
  FROM    `warehouse-cost-table` 
  GROUP BY LEFT(`warehouse-cost-table`.`country`,2
) t on t.my_country  =  w.`location-tariff-code`
set  Warehouse.`outbound-cost-pal  = t.average

【讨论】:

    猜你喜欢
    • 2016-06-19
    • 1970-01-01
    • 2015-10-07
    • 2012-04-05
    • 2020-02-26
    • 1970-01-01
    • 2019-04-05
    • 2021-01-19
    • 1970-01-01
    相关资源
    最近更新 更多