将一个字段从一个表更新到另一个表,涉及3个表连接

时间:2015-06-12 21:36:29

标签: sql database join firebird

我有一个表我需要更新价格字段。我需要从另一个表中的不同价格字段更新此字段。我可以访问所需的更新表的唯一方法是将另一个表连接到此查询中。

所以我需要在更新中加入3个表。

表A包含需要更新的价格字段。在此表中,我有产品的外键。

表A结构

-PK_TABLE_A,

-FK_TABLE_B,

-ITEM_COST,

-ITEM_PRICE(需要从表C更新)

表B是具有产品PK的产品表。该表用于访问表C. 我还需要过滤表B以仅更新某种库存类型。

表B结构

-PK_TABLE_B,

-FK_TABLE_C,

-DESCRIPTION,

-QUANTITY,

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

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

表C结构

-PK_TABLE_C,

-FK_TABLE_B,

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

-USED_DATE,

-ID

我使用的DBMS是Firebird。

我试图使用子查询无济于事。我在使用两个表进行更新时经常使用子选择,所以像

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张表。

任何帮助将不胜感激。

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

1 个答案:

答案 0 :(得分:2)

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

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

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'; 

再次编辑,更好地了解问题