gpt4 book ai didi

sql - 使用单个查询更新多个表列值

转载 作者:行者123 更新时间:2023-12-04 23:22:40 24 4
gpt4 key购买 nike

如何使用单个查询更新多个表中的数据?

MySQL 示例

MySQL 中的等效代码:

UPDATE party pLEFT JOIN party_name n ON p.party_id = n.party_idLEFT JOIN party_details d ON p.party_id = d.party_idLEFT JOIN incident_participant ip ON ip.party_id = p.party_idLEFT JOIN incident i ON ip.incident_id = i.incident_idSET  p.employee_id = NULL,  c.em_address = 'x@x.org',  c.ad_postal = 'x',  n.first_name = 'x',  n.last_name = 'x'WHERE  i.confidential_dt IS NOT NULL

使用 Oracle 11g 的相同语句是什么?

谢谢!

RTFM

使用Oracle时似乎单个查询是不够的:

http://download-west.oracle.com/docs/cd/B10501_01/server.920/a96540/statements_108a.htm#2067717

最佳答案

/** XXX CODING HORROR... */

根据您的需要,您可以使用可更新 View 。您创建一个基 TableView 并向该 View 添加一个“代替”触发器,然后直接更新该 View 。

一些示例表:

create table party (
party_id integer,
employee_id integer
);

create table party_name (
party_id integer,
first_name varchar2(120 char),
last_name varchar2(120 char)
);

insert into party values (1,1000);
insert into party values (2,2000);
insert into party values (3,3000);

insert into party_name values (1,'Kipper','Family');
insert into party_name values (2,'Biff','Family');
insert into party_name values (3,'Chip','Family');

commit;

select * from party_v;

PARTY_ID EMPLOYEE_ID FIRST_NAME LAST_NAME
1 1000 Kipper Family
2 2000 Biff Family
3 3000 Chip Family

...然后创建一个可更新的 View

create or replace view party_v
as
select
p.party_id,
p.employee_id,
n.first_name,
n.last_name
from
party p left join party_name n on p.party_id = n.party_id;

create or replace trigger trg_party_update
instead of update on party_v
for each row
declare
begin
--
update party
set
party_id = :new.party_id,
employee_id = :new.employee_id
where
party_id = :old.party_id;
--
update party_name
set
party_id = :new.party_id,
first_name = :new.first_name,
last_name = :new.last_name
where
party_id = :old.party_id;
--
end;
/

您现在可以直接更新 View ...

update party_v
set
employee_id = 42,
last_name = 'Oxford'
where
party_id = 1;

select * from party_v;

PARTY_ID EMPLOYEE_ID FIRST_NAME LAST_NAME
1 42 Kipper Oxford
2 2000 Biff Family
3 3000 Chip Family

关于sql - 使用单个查询更新多个表列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2695116/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com