多对多关系表不工作无法从中删除值

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 语句和variablesv_addressv_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 我重试了您在评论中提供的所有数据的代码,没有发现问题。 非常尊重我很高兴也很高兴你帮了我很多谢谢先生!希望如果你解决了我的问题,我就可以安全地工作了。无论如何,谢谢先生

以上是关于多对多关系表不工作无法从中删除值的主要内容,如果未能解决你的问题,请参考以下文章

如何更新值多对多 Laravel

保存循环删除多对多CoreData关系的一端

EF Core 5,删除多对多关系

objectID 多对多关系

具有多对多关系的级联删除[重复]

在多对多关系中删除正确