将字段从一个 table 更新为另一个,涉及 3 table 连接

Update a field from one table to another, involving a 3 table join

我有一个 table 我需要更新其中的价格字段。我需要从另一个 table 的不同价格字段更新此字段。获得更新所需 table 的唯一方法是将另一个 table 加入此查询。

所以我总共需要加入 3 table 更新。

Table A 有需要更新的价格字段。在这个 table 我有产品的外键。

Table一个结构

-PK_TABLE_A,

-FK_TABLE_B、

-ITEM_COST、

-ITEM_PRICE(需要从Table C更新)

Table B是产品table 有产品的PK。这个table用来访问TableC。 我还需要过滤 Table B 以仅更新特定的股票类型。

Table B结构

-PK_TABLE_B,

-FK_TABLE_C、

-描述,

-数量,

-ITEM_TYPE(需要在where子句中加入的字符串,只更新特定类型的记录)。

Table C有一个外键返回Table B。它还包含我需要用来更新table A [=13中的价格字段的价格字段=]

Table C 结构

-PK_TABLE_C、

-FK_TABLE_B、

-PRICE(这是我需要用来更新table A中价格字段的字段)

-USED_DATE、

-编号

我使用的 DBMS 是 Firebird。

我试过使用子查询无济于事。我经常在使用两个 table 更新时使用子 select,所以像

UPDATE table1 AS t1
    SET t1.FK = (select table2.PK
                 FROM table2 INNER JOIN 
                      table1
                      ON table2.FK = table2.PK
                 WHERE table2.name = t1.name)

我只是在努力使用与第 3 个 table 合并的相同技术。 我什至不确定这是否是解决这种情况的正确方法。我看过 google,但我遇到的大多数示例都没有使用第三个 table。

如有任何帮助,我们将不胜感激。

** 已编辑以包含有关 table 结构的更多详细信息。

您能更详细地向我们展示 table 结构吗?

如果 tableA 和 tableC 都有一个指向 tableB 的外键 我认为您不需要包含三个 table 连接.你只需要

update tableA set ITEM_PRICE = SELECT(PRICE FROM TableC WHERE 
TableA.FK_TABLE_B = TableC.FK_TABLE_B;

除非我遗漏了什么?

编辑以反映对问题的更好理解

好的,这次我想我明白了:

    update tableA set price = 
    (select price from tableC where tableA.fk_tableB = tableC.fk_tableB) where 
    (Select item_type from tableB where tableB.pk_tableB = tableA.fk_tableB) = 
'$itemTypeVariable'; 

再次编辑,对问题有了更好的理解