多对多关系表不工作无法从中删除值
Posted
技术标签:
【中文标题】多对多关系表不工作无法从中删除值【英文标题】:Many to Many Relationship table Not working cannot delete Value from that 【发布时间】:2019-02-03 06:04:42 【问题描述】:declare
begin
for i in (select aid ,address from address)
loop
for j in (select aid ,address from address )
loop
if i.address=j.address then
if i.aid!=j.aid then
update employee_add
set aid=i.aid
where aid=j.aid;
delete from address
where aid=i.aid;
end if;
end if;
end loop;
end loop;
end;
/
此代码可以作为for loop
正常工作。之后它显示错误:------
*原因:外键值没有匹配的主键值。 *操作:删除外键或添加匹配的主键。
我有表employee[eid (primary key) ,ename]
,address[aid (primary
key),address]
,以及多对多关系表employee_add[eid,aid]
。
请帮忙!提前致谢:)
【问题讨论】:
用通俗易懂的语言描述你要解决的问题。 实际上我有 3 个表地址、员工和雇员地址表,其中地址表有地址 id 和地址名称,地址 id 是主键,地址是重复地址,如 101-banglore 102-banglore 103-banglore 104 -pune 105-pune 106-hyderbad 和employee_address 有开斋节和援助,例如1-101,1-102,1-103,2-101,2-101,2-104,3-102,3-103... . 我想从具有相同地址的地址中删除重复数据,同时我想删除与employee_address 关联的地址,这样employee_address 表中不应该有任何数据丢失 【参考方案1】:您只能使用一个loop
语句和variables
(v_address
和v_aid
)来比较行,如下块所示:
declare
v_address address.address%type;
v_aid address.aid%type;
begin
for i in (select aid ,address from address order by aid)
loop
if nvl(v_address,'')=i.address then
update employee_add set aid=v_aid where aid=i.aid;
delete address where aid=i.aid;
else
v_address := i.address;
v_aid := i.aid;
end if;
end loop;
end;
【讨论】:
请解释一下这个“”if nvl(v_address,'')“”我无法理解这个 @ViratSingh 在某些情况下不适合,尤其是不等式,直接整理两个项,其中一个为空,另一个不为空。并且在第一步中 v_adress 仍然是 null 。这是平等,但我认为最好让开发人员养成这种习惯。 你能告诉我为什么我的代码只工作了 1 次,因为它为其他循环 101 提供了值,它工作正常,但在其他情况下,它向我显示错误,如外键没有匹配的主键我我是 pl sql 的新手,所以.. 这可以帮助我更好地理解它。如果你能帮助我,那就太好了。顺便说一句谢谢! @ViratSingh 我重试了您在评论中提供的所有数据的代码,没有发现问题。 非常尊重我很高兴也很高兴你帮了我很多谢谢先生!希望如果你解决了我的问题,我就可以安全地工作了。无论如何,谢谢先生以上是关于多对多关系表不工作无法从中删除值的主要内容,如果未能解决你的问题,请参考以下文章