如何更新主键为另一个表的主键的表?

问题描述 投票:0回答:2

我有这两个表:

CREATE TABLE COPIE(IDC VARCHAR2(10) PRIMARY KEY,
                   ETAT CHAR(1)
                     CHECK (ETAT IN ('M','P','D')),
                   IDO VARCHAR2(10) REFERENCES OUVRAGE(IDO));

CREATE TABLE PRET(IDC VARCHAR2(10) REFERENCES COPIE(IDC),
                  IDE REFERENCES ETUDIANT(IDE),
                  DATEP DATE,
                  DATER DATE,
                  AVIS VARCHAR2(7)
                    CHECK (AVIS IN ('LIKE','DISLIKE')),
                  IDB VARCHAR2(10) REFERENCES BIBLIO(IDB),
                  PRIMARY KEY(IDC,IDE,DATEP));

所以基本上我试图建立一个更新表COPY ETAT的过程,其中datep不为null且dater为null(在表pret中)

sql oracle join sql-update cascade
2个回答
0
投票

IDC是两个表中的主键或主键的一部分的事实实际上不应该成为问题。如果您想更新COPIE.ETAT,您应该可以说

UPDATE COPIE
  SET ETAT = 'M'
  WHERE IDC = 'whatever'

这不会影响表PRET中的任何内容,因为您没有更改IDC字段,并且ETAT未引用PRET字段。


0
投票

据我所知,您可以按以下方式使用merge

Merge into copie c
Using (select * from pret
       Where dater is null and datep is not null) t
On (c.idc = t.idc)
When matched then 
Update set c.etat = <value whichever you want>

或者您可以直接将update语句用作

Update copie c 
Set c.etat = <value whichever you want>
Where c.idc in 
   (select t.idc
      From pret t
     Where dater is null 
       and datep is not null)

干杯!

© www.soinside.com 2019 - 2024. All rights reserved.