我有一个表我需要更新价格字段。我需要从另一个表中的不同价格字段更新此字段。我可以访问所需的更新表的唯一方法是将另一个表连接到此查询中。
所以我需要在更新中加入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张表。
任何帮助将不胜感激。
**编辑以包含有关表结构的更多详细信息。
答案 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';
再次编辑,更好地了解问题