sql >> Database teknologi >  >> RDS >> Oracle

Hvordan opretter jeg en tabel med begrænsninger, mens jeg trækker data fra en anden tabel

Det ser ud til, at du skal bruge en sammensat nøgle til din WRITERS-tabel. Eksempel(testet med Oracle 12c og 11g, dbfiddle her ):

-- 4 forfatteropret tabelforfatter (autorid primærnøgle, fname, lname )vælg 1, 'fname_1', 'lname_1' fra dual union allselect 2, 'fname_2', 'lname_2' fra dual union allselect 3, 'fname_3', 'lname_3' fra dual union allselect 4, 'fname_4', 'lname_4' fra dual;-- 7 bookscreate tabelbøger (isbn primærnøgle, title )vælg '978-1449324451', 'title_1' fra dual union allselect '978-1449324452', 'title_2' fra dual union allselect '978-1449324453', 'title_3' fra dual union allselect '978-1449324454', 'title_1_4' fra dual union alle vælg '497241-fra'_title fra '978-14493244454' dual union allselect '978-1449324456', 'title_3_4' fra dual union allselect '978-1449324457', 'title_4_4' fra dual;-- antag at 4 bøger er skrevet af en og samme forfatter, create table bookauthor()asselect, isbn A.authorid, B.isbnfra forfatter A join bøger B på A.authorid =substr( B.title, length( B.title ), 1 );

Tilføj nogle begrænsninger til BOOKAUTHOR-tabellen, og kontroller dens indhold:

-- authorid, isbnalter table bookauthor add ( constraint ba_fk1 fremmed nøgle( authorid ) referencer author( authorid ), constraint ba_fk2 fremmed nøgle( isbn ) referencer books( isbn ), constraint ba_pk primærnøgle ( authorid, isbn ) );SQL> vælg * fra bogforfatter; AUTHORID ISBN ---------- -------------------- 1 978-1449324451 2 978-1449324452 3 978-1449324453 4 978-1449324454 4 978-144932444 464 464 464 4 978-1449324457 

"Original" DDL-kode (med mindre ændringer) -> INSERT mislykkes

opret tabelskrivere ( authorid varchar2( 4 ), lname varchar2( 10 ), fname varchar2( 10 ), isbn char( 14 ), title varchar2( 30 ) constraint title_nn ikke null, constraint wt_pk primærnøgle ( authorid ), constraint wt_fk fremmednøgle( isbn ) referencer bøger( isbn ));INSERT INTO writersSELECT autorid, fname, lname, isbn, titel FRA forfatter JOIN bogforfatter USING(authorid) JOIN bøger USING(isbn);-- ORA-00001:unikt begrænsning (...WT_PK) overtrådt -- forfatter 4 med 4 bøger! 

Foreslået DDL-kode (og test):

opret tabel writers2 ( authorid varchar2( 4 ), lname varchar2( 10 ), fname varchar2( 10 ), isbn char( 14 ), title varchar2( 30 ) constraint title_nn2 ikke null, constraint wt_pk2 primærnøgle ( authorid , isbn ), constraint wt_fk2 fremmednøgle( isbn ) referencer bøger( isbn ));INSERT INTO writers2SELECT autorid, fname, lname, isbn, titel FRA forfatter JOIN bogforfatter USING(authorid) JOIN bøger USING(isbn);-- 7 rækker indsat . 

VÆLGER fra WRITERS2:

SQL> vælg * fra writers2;AUTH LNAME FNAME ISBN TITLE ---- ---------- ---------- -------- ------ ------------------------------1 fname_1 lname_1 978-1449324451 title_1 2 fname_2 lname_2 978-1449324452 title_2 3 FNAME_3 LNAME_3 978-1449324453 TITEL_3 4 FNAME_4 LNAME_4 978-1449324454 TITEL_1_4 4 FNAME_4 LNAME_4 978-1449324455 title_4 4 fName_4 LNAM 

Jeg er dog ikke sikker på, hvorfor du skal bruge WRITERS-tabellen - da du kan generere dens data ved at køre en forespørgsel.



  1. mange-til-mange forhold i doktrinen

  2. Returner en liste over triggere i SQL Server

  3. Er der et versionskontrolsystem til databasestrukturændringer?

  4. java.sql.SQLException:IO Undtagelse:Netværksadapteren kunne ikke oprette forbindelsen?