【发布时间】: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 行”。
我的方法是否太复杂而无法开始?
【问题讨论】:
-
欢迎来到 SO。在表/列标识符中包含“-”只是自找麻烦。并查看:Why should I provide an MCRE for what seems to me to be a very simple SQL query?