|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Bannato
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2683
|
[SQL] domandina circa query di delete
Se ho 3 tabelle così fatte:
IMPIEGATO(IDimpiegato, nome, mansione, IDdipartimento) COMPETENZE_IMPIEGATO(IDimpiegato, competenze) DIPARTIMENTO(IDdipartimento, nome) dove i campi in grassetto sono il campo identificatore della tabella. Ho questa query che deve eliminare tutti gli impiegati che lavorano nel dipartimento avente nome "Finanza" e cancellare tutte le righe delle loro competenze. In pratica devo eliminare delle righe dalle tabelle IMPIEGATO e COMPETENZE_IMPIEGATO. La query che ho trovato sul libro è: Codice:
delete IMPIEGATO, COMPETENZE_IMPIEGATO from IMPIEGATO, COMPETENZE_IMPIEGATO, DIPARTIMENTO where IMPIEGATO.IDimpiegato = COMPETENZE_IMPIEGATO.IDimpiegato and IMPIEGATO.IDdipartimento = DIPARTIMENTO.IDdipartimento and dipartimento.nome = 'Finanza'; allora io elimino solo dalle tabelle che seguono listruzione delete quindi cancello righe solo da IMPIEGATO e COMPETENZE_IMPIEGATO. Le tabelle elencate dopo l'istruzione from vengono invece usate solo per cercare dati e quindi effettuare i join (a meno che non siano anche successori di deete). Ora non miè chiaro cosa faccio con i where...è come se gli dicessi: elimina dalle tabelle IMPIEGATO e COMPETENZE_IMPIEGATO dove: IMPIEGATO.IDimpiegato = COMPETENZE_IMPIEGATO.IDimpiegato questo perchè devo eliminare uno stesso utente con uno stesso id da entrambe le tabelle? non capisco mi sfugge...helpme... Grazie Andrea |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Sep 2007
Messaggi: 754
|
Ti conviene fare una foreing key on delete cascade in modo che eliminato l'impiegato si tira dietro pure le competenze
__________________
http://www.tevigroup.it/ |
|
|
|
|
|
#3 |
|
Bannato
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2683
|
cioè di dirgli di pescarsinla chiave IDimpiegato da altre tabelle e di eliminare tutte le occoreenze da esse quando elimino da IMPIEGATI? cmq era un esempio per capire come funzionano i join più che un'esigenza pratica...
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Sep 2007
Messaggi: 754
|
Questo è un esempio di quello che ti dicevo
Codice:
DROP TABLE IF EXISTS UNO; CREATE TABLE UNO ( ID_TESTA INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, PRIMARY KEY (ID_TESTA) ); DROP TABLE IF EXISTS DUE; CREATE TABLE DUE ( ID_RIGA INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, ID_TESTA INT(10) UNSIGNED NOT NULL, PRIMARY KEY (ID_RIGA), KEY FK_DUE_1 (ID_TESTA), CONSTRAINT FK_DUE_1 FOREIGN KEY (ID_TESTA) REFERENCES UNO (ID_TESTA) ON DELETE CASCADE ON UPDATE CASCADE );
__________________
http://www.tevigroup.it/ |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Sep 2007
Messaggi: 754
|
Con le stesse tabelle senza la CASCADE ON DELETE facendo cosi :
Codice:
DELETE UNO,DUE FROM UNO,DUE WHERE UNO.ID_TESTA=DUE.ID_TESTA P.S. Le prove sono fatte su MySQL
__________________
http://www.tevigroup.it/ |
|
|
|
|
|
#6 |
|
Bannato
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2683
|
ti ringrazio...si poi anche la cascade on delete et simili me le devo vedere per benino...
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Sep 2007
Messaggi: 754
|
__________________
http://www.tevigroup.it/ |
|
|
|
|
|
#8 |
|
Bannato
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2683
|
ti ringrazio...darò senz'altro una studiata anche a questo :-)
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:00.




















