简体   繁体   中英

how to delete from multiple tables in the same SQL statement with foreign keys?

These are my tables:

create table Enquete 
    (enqueteId int auto_increment,
    bedrijvenId int,
    primary key (enqueteId),
    foreign key(bedrijvenId) references Bedrijven(bedrijvenId)
    );
create table Gesloten_vragen
    (gesloten_vragenId int auto_increment,
    enqueteId int,
    gesloten_vraag varchar(255),
    primary key(gesloten_vragenId),
    foreign key(enqueteId) references Enquete(enqueteId)
    );
create table Antwoorden_gesl_vragen
    (klantenId int,
    gesloten_vragenId int,
    antwoordId int auto_increment,
    antwoord int(2),
    primary key(antwoordId),
    foreign key(gesloten_vragenId) references Gesloten_vragen(gesloten_vragenId),
    foreign key(klantenId) references Klanten(klantenId)
    );

I want to delete Enquete "where enqueteId is = ?". So I used:

DELETE Enquete,Gesloten_vragen,Antwoorden_gesl_vragen 
FROM Enquete JOIN Gesloten_vragen JOIN Antwoorden_gesl_vragen  
WHERE Enquete.enqueteId= Gesloten_vragen.gesloten_vragenId
AND Gesloten_vragen.gesloten_vragenId = Antwoorden_gesl_vragen.gesloten_vragenId
AND Enquete.enqueteId = 3;

This doesn't give an error, but it doesn't effect my table. database image

I think your SQL needs to use the JOIN with ON clause as shown below

DELETE Enquete
      ,Gesloten_vragen
      ,Antwoorden_gesl_vragen 
  FROM Enquete 
  JOIN Gesloten_vragen 
    ON Enquete.enqueteId = Gesloten_vragen.gesloten_vragenId
  JOIN Antwoorden_gesl_vragen  
    ON Gesloten_vragen.gesloten_vragenId = Antwoorden_gesl_vragen.gesloten_vragenId
 WHERE Enquete.enqueteId = 3;

Alternatively you can set up cascading deletes between your parent and child tables.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM