Newsgroup: it.comp.lang.visual-basic
Titolo: [?] SQL DELETE

problemino con l'istruzione DELETE (in access :P)
Ho la classica tabella [Fatture] -> [Dettagli Fattura].
Devo cancellare tutte le fatture e relativi dettagli data la condizione X.
Come faccio a fare una DELETE su tabelle relazionate?
Grazie, ciao.

 wrote in message
news:Nppj8.57368$_u5.1...@news1.tin.it...

Se la relazione è stata (correttamente) definita "cascade"
(elimina record correlati a catena), ti basta cancellare
le fatture ed Access provvederà a cancellare
automaticamente le relative righe di dettaglio:
    Delete From Fatture Where condizione
In caso contrario, la cosa diventa più complicata.
Se la condizione può essere testata solo sulla
tabella principale, devi prima fare una select sulla
prima tabella e, per ogni fattura trovata, andare
a cancellare le relative righe sulla tabella figlia;
infine cancelli la riga sulla tabella principale.
--
Er Roscio.

 ha scritto nel messaggio
news:Nppj8.57368$_u5.1...@news1.tin.it...

Dall'help del VB:
----------------------------------------------------------------------------
----------------------------------------------------
DELETE
Crea una query di eliminazione che rimuove i record da una o più tabelle
elencate nella proposizione FROM che soddisfano la proposizione WHERE.
Sintassi
DELETE [tabella.*]
FROM tabella
WHERE criteri
L'istruzione DELETE è composta delle parti descritte di seguito...
----------------------------------------------------------------------------
---------------------------------------------------
Però a me con più tabellE in un sol colpo non riesce ho fatto un po' di
esperimenti... io di solito cancello prima i dettagli e poi il master
record, magari con un begin/committrans....
Ciao

 sulla master).
Se non c'è un trucco non posso.
Spiego con esempio:
Fatture                Dettagli
-------               ----------
Data         ,------>   ID_Fattura
ID      ----'
Voglio cancellare tutte le fatture con data diversa da X (non chiedermi
perchè :P): come faccio con solo 2 SQL?
Ciao

 perchè :P): come faccio con solo 2 SQL?
Ho provato solo con Select al posto di Delete:
1)
DELETE * FROM DETTAGLI WHERE ID_FATTURA IN (SELECT ID FROM FATTURE WHERE
DATA<>#MM/GG/AAAA#)
2)
DELETE * FROM FATTURE WHERE DATA<>#MM/GG/AAAA#

 ha scritto nel messaggio
news:7ztj8.58046$_u5.1...@news1.tin.it...

1- Cancellazione da fatture:
DELETE FROM Fatture WHERE DATA <> ....
2- Cancellazione Dettagli
DELETE FROM DETTAGLI WHERE ID_Fattura NOT IN (SELECT ID FROM Fatture)
Non e' il massimo della velocita', ma in questo modo elimini tutta la fuffa
dalle tabelle (righe di dettaglio che per un qualche motivo non hanno piu'
la fattura ma esistono ancora su DB).
Bye by Massimo 8-]
P.S. Anch'io preferisco gestire le relazioni da codice...

 la fattura ma esistono ancora su DB).
E' abbastanza veloce per quel che mi serve, e infatti cosě risolvo anche il
problema di eventuali record orfani (ma... come mai non hanno piů i
genitori?)
Ciao

 DELETE FROM DETTAGLI WHERE ID_Fattura NOT IN (SELECT ID FROM Fatture)
Ehehe... un bel modo di gestire a mano l'integrità referenziale;
complimenti !... :-)))
--
Er Roscio.

 genitori?)
Cancella sempre prima i dettagli e poi il master... in questo modo al
massimo ti puň succedere di trovarti una fattura senza dettagli della quale
te ne puoi accorgere facilmente! :)
Ciao
Alessandro

 cliente ti insegue armato di mattarello).
Buona idea, anche se per ciň che devo fare io se rimane qualcosa in piů non
importa.
L'importante č che la roba non manchi! :P
Ciao