基于其他表中的行的 PLSQL 更新
Posted
技术标签:
【中文标题】基于其他表中的行的 PLSQL 更新【英文标题】:PLSQL UPDATE BASED ON ROWS FROM OTHER TABLE 【发布时间】:2014-08-17 13:17:40 【问题描述】:我在 APEX A 和 B 中有以下表格。
A 有列:
ID_A;
VALUE;
B 有列:
ID_C_FK;
ID_A_FK
我想在ID_A
等于ID_A_FK
的表B
的选定行中更新表A
中的VALUE
列,其中ID_C_FK
等于x
例如:A
有行(
ID_A value
------------
1 1
2 1
3 0
4 0
5 0
表B
有行
ID_C_FK ID_A_FK
------------------
8 4
9 4
9 5
我想更新表A
中的VALUE
仅适用于从B 中选择的行中具有ID_A
的行,并且从B 中选择行的条件是ID_C_FK
等于x = 9
;因此,表 A
最终应该有行:
ID_A value
------------
1 1
2 1
3 0
4 1
5 1
如何在 PL/SQL 中编写这样的更新?
感谢您考虑我的请求。
【问题讨论】:
为什么你认为你需要一个存储过程? 我不明白你的问题,请你换个说法好吗? @horse with no name: 我在 apex 做项目,我必须在使用按钮提交后更新表格。我创建了这样的例子来说明问题 【参考方案1】:我想这就是你想要的:
update a
set value = 1
where exists (select 1
from b
where b.id_a_fk = a.id_a and b.id_c_fk = 9
);
【讨论】:
为什么你把 1 放在 select 之后?我不明白这一点:b.id_a_fk = a.id_a 和 b.id_c_fk = 9 这是一个相关子查询。1
只是一个任意值,如果存在匹配则返回一些东西。 where
上的条件是要匹配两个表文本中的join
条件。
b.id_c_fk = 9 选择 idd_c_fk= 9 的行,好的,但是如何理解这个意思: b.id_a_fk = a.id_a 在你所放的代码的上下文中。这个想法是更新 A 中由 b.id_a_fk 指示的行中 b.id_c_fk = 9 的行
所以外部部分 - 更新应该只在从 id_c_fk=9 的 b 行中选择 id 的行中设置值
@user3376246 。 . .这就是为什么有两个条件。 id_a
需要匹配id_a_fk
并且另一列的值需要是9
。以上是关于基于其他表中的行的 PLSQL 更新的主要内容,如果未能解决你的问题,请参考以下文章
如何使用填充旧表中的行的动态数据动态更新新MySQL表中的行?