【问题标题】:SQL error using INNER JOIN function to insert values使用 INNER JOIN 函数插入值的 SQL 错误
【发布时间】:2020-03-08 05:22:04
【问题描述】:

我的简单 SQL 代码有问题,因为我只是一个初学者。 我正在尝试检索不同国家/地区的 outbound-cost-pal 的平均值,并将其写入仓库的每个相应行。

我的代码如下:

INSERT INTO Warehouse (`inbound-cost-pal`)
SELECT cost.`average`
FROM Warehouse AS wh
INNER JOIN (
    SELECT  
    AVG     (`warehouse-cost-table`.`outbound-cost-pal`) AS `average`
    FROM    `warehouse-cost-table` 
            )cost
ON wh.`location-tariff-code` = LEFT(cost.`country`,2)
;

我收到错误消息“'on clause' 中的未知列 'cost.country'”。

【问题讨论】:

  • 更新您的问题添加适当的数据样本和预期结果...
  • 在表/列标识符中包含“-”是一个灾难性的坏主意

标签: mysql inner-join psi


【解决方案1】:

如果您需要每个国家/地区的 avg(),那么您还需要子查询中的国家/地区

INSERT INTO Warehouse (`inbound-cost-pal`)
SELECT cost.`average`
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)
;

否则,如果您不需要国家/地区的 avg() 而是整体平均,那么您可以使用交叉联接而不是内部联接

INSERT INTO Warehouse (`inbound-cost-pal`)
SELECT cost.`average`
FROM Warehouse AS wh
CROSS JOIN (
    SELECT  
    AVG(`warehouse-cost-table`.`outbound-cost-pal`) AS `average`
    FROM    `warehouse-cost-table` 
            ) cost
  ;

你应该避免函数名和括号之间的空格.. AVG()

【讨论】:

    【解决方案2】:

    您在选择子查询成本时忘记了国家

    INSERT INTO Warehouse (inbound-cost-pal)
    SELECT cost.average
    FROM Warehouse AS wh
    INNER JOIN (
        SELECT  
        AVG     (warehouse-cost-table.outbound-cost-pal) AS average,
                country
        FROM    warehouse-cost-table 
                )cost
    ON wh.location-tariff-code = LEFT(cost.country,2)
    ;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-23
      • 1970-01-01
      • 2012-08-17
      • 2018-05-04
      • 2015-01-30
      • 1970-01-01
      • 2023-02-15
      • 2017-09-21
      相关资源
      最近更新 更多