将字段从一个 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';
再次编辑,对问题有了更好的理解
我有一个 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';
再次编辑,对问题有了更好的理解