Jag vill använda en join i en delete-sats. Finns inget sådant. Dock finns det i vissa DBMS (ex SQL Server 2000) möjligheten att sätta 'cascading deletes' i foreign keys, dvs att om man tar bort en rad i en tabell, vilken refereras till av andra tabeller, så tas även de rader från dessa tabeller som refererar till den aktuella raden bort. Men det måste man alltså ha definierat när man skapar sin databas, det är inte något man skriver i en delete-sats. Om du inte kan använda cascading delete får du göra såhär:Join/Delete
Skulle någon vilja ge mig ett exempel på hur man gör (om man nu kan göra det)
T.ex om man har en databas med företag med deras anställda. Om jag vill ta bort ett företag så vill jag ta bort det företagets anställda också. I det här fallet är det ju enkelt. Först kör man en sats som tar bort företaget från företags-tabellen, och sedan kör man en sats som tar bort alla anställda som tillhör det företaget från anställda-tabellen. Lätt!
Men säg nu att jag vill ha en tabell med telefonnummer till de olika anställda också. Varje anställd ska ha ett obegränsat antal telefonnummer. T.ex ett till jobbet, ett hem, ett till mobilen osv. Om jag nu tar bort ett företag, blir det genast mycket svårare. Då ska jag ta bort alla anställda som tillhör det företaget + att jag ska ta bort alla telefonnummer som tillhör respektive anställd.
I det här fallet måste det ju användas en DELETE-sats med join.
Jag antar att det är väl använt. Men jag har inte stött på det, eller behövt använda det i mina program.
Tack för hjälpen!
/JörgenSv: Join/Delete
Sv: Join/Delete
DELETE FROM telefon WHERE PersonID IN (SELECT ID FROM personer WHERE ForetagID = ?)
DELETE FROM personer WHERE ForetagID = ?
DELETE FROM foretag WHERE ID = ?
/Johan