如何更新主键是另一个table中的主键的table?

How to update a table whose primary key is the primary key in another table?

我有这两个 tables :

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));

所以基本上我试图制作一个程序来更新 TABLE COPIE 中的 ETAT,其中它的 datep 不为空并且 dater 为空(在 table pret 中)

IDC 是两个 table 中的主键或主键的一部分这一事实确实不应该成为问题。如果你想更新 COPIE.ETAT 你应该可以说

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

这不会影响 table PRET 中的任何内容,因为您没有更改 IDC 字段,并且 ETAT 字段未被 PRET.

据我了解你的问题,你可以使用 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)

干杯!!