我有桌子"人"和桌子" Fisica"这是" Person"的延伸。两个表都与字段名称Id相关,我想根据包含两个表的条件更新表。 例如:
Tables:
Persona(Id, Name, Money)
Fisica(Id, LastName, Year)
使用数据:
Persona(1, X, 5)
Persona(2, A, 10)
Fisica(1, Y, 1990)
Fisica(2, B, 2000)
我想在Persona.Name =' X'中设置Persona.Name = some_Value,Fisica.LastName = other_Value和Fisica.Year = number,结果
Persona(1, some_Value, 5)
Persona(2, A, 10)
Fisica(1, other_Value, number)
Fisica(2, B, 2000)
我在Oracle工作
答案 0 :(得分:0)
您无法使用一个语句更新两个表。所以你需要两个UPDATE
语句。
所以你必须更新一个,然后另一个。问题是,首先是哪一个?
这并不重要,但如果您先更新Persona并更改名称,则在更新Fisica时必须使用新名称。像这样:
update Persona
set name = 'some_Value'
where name = 'current_Name'
;
update Fisica
set lastname = 'other_Value',
year = number
where id = (
select id
from Persona
where name = 'some_Value'
)
;
如果您先更新Fisica,则会同时使用旧的name值,如下所示:
update Fisica
set lastname = 'other_Value',
year = number
where id = (
select id
from Persona
where name = 'current_Value'
)
;
update Persona
set name = 'some_Value'
where name = 'current_Value'
;
注意number
必须替换为实际的数值。
良好的编码实践是将两个语句放在同一个事务中,并且只有在它们都成功时才提交。
答案 1 :(得分:0)
虽然Oracle没有提供像mysql这样的功能,我们可以像这样编写查询:
Update table1 t1, table2 t2 set t2.field2="ABC" where t1.id=t2.id
但您可以在Oracle for Views中使用单个查询更新多个表。
因此,为上述两个表Persona, Fisica
创建视图,并按如下方式编写查询:
CREATE OR REPLACE FORCE VIEW "Persona_Fisica" ("PersonaID", "Name", "Money", "FisicaID", "Lastname", "Year") AS
select P.Id as PersonaID,
Name as Name,
Money as Money,
F.Id as FisicaID,
LastName as Lastname,
year as Year
from Persona P,
Fisica F
where P.ID=F.ID
/
Update Persona_Fisica set Name=some_Value, LastName=other_Value,Year=number were Name='X',