首页 > 解决方案 > 使用来自 3 个表的 INNER JOIN 进行 UPDATE 操作

问题描述

我正在尝试更新一个表中的两个字段,其中的信息位于第三个表上,该表由第二个表引用。第三个表有填充的“重量”字段,我要更新第一个表的“重量”字段。它们通过“序列号”相关联,但第一个和第三个表中的数字格式不同。第二个表基本上是在每种格式中都有“序列号”的参考。

我创建了一个查询,该查询使用第二个表从第一个和第三个表返回数据以关联字段:

SELECT  
tbl_inv_main.invnum,
tbl_inv_main.model,
tbl_inv_main.serial,
tbl_viper_ref.reformattedserial,
tbl_mpn_viper.dryweight,
tbl_mpn_viper.wetweight
 FROM tbl_inv_main 
INNER JOIN tbl_viper_ref 
ON   tbl_inv_main.serial = tbl_viper_ref.serial
INNER JOIN tbl_mpn_viper
ON tbl_mpn_viper.serial = tbl_viper_ref.reformattedserial

但是现在我想做的基本上是相同的事情,但是用第三个表中的“重量”数据更新第一个表。

我尝试使用查询中的相同 INNER JOIN 语句创建命令来更新第一个表。

到目前为止,我想出的是:

UPDATE "tbl_inv_main"
SET 
tbl_inv_main.dryweight = tbl_mpn_viper.dryweight,
tbl_inv_main.wetweight = tbl_mpn_viper.wetweight
FROM tbl_inv_main
INNER JOIN tbl_viper_ref 
ON   tbl_inv_main.serial =tbl_viper_ref.serial
INNER JOIN tbl_mpn_viper
ON tbl_mpn_viper.serial = tbl_viper_ref.reformattedserial

从其他来源我读到应该使用第三个表中记录的数据更新第一个表中的记录。

我正在使用 libreoffice 基础。当我尝试运行上述 UPDATE 命令时,出现以下错误: Column not found: DRYWEIGHT in statement [ UPDATE "tbl_inv_main" SET tbl_inv_main.dryweight]

标签: sqldatabaselibreoffice

解决方案


尝试这个:

UPDATE tbl_inv_main final
SET 
    final.dryweight = m.dryweight,
    final.wetweight = m.wetweight



FROM tbl_inv_main i
   INNER JOIN tbl_viper_ref v ON   i.serial =v.serial
   INNER JOIN tbl_mpn_viper m ON  v.reformattedserial = m.serial

   Where final.serial =i.serial

推荐阅读