24/06/2023 - @Alex ha scritto:
24/06/2023 - Sgrubak ha scritto:
Ma una cosa semplice tipo
DELETE FROM UtentiPortale UP
WHERE UP.id_sis_user IN (SELECT VAP.id_sis_user FROM Vecchi_Accessi_Portale VAP)
Specificare i nomi dei campi (anche con l'asterisco), benché sintatticamente ammesso, è semanticamente inutile/sbagliato. I records vengono cancellati per intero. A voler operare sui singoli campi serve l'UPDATE.
La relazione serve per garantire l'integrità referenziale, la JOIN è di nuovo inutile in questo caso. Basta prendere tutti i valori da una tabella e dire di cancellare quelli dall'altra. Se ci sono li elimina. Se non ci sono non li considera.
La soluzione in questione sicuramente è ottima, io la privilegerei di certo.
Proverei tuttavia ad analizzare i piani di esecuzione della Query per valutarne l'efficienza nel caso le prestazioni potessero essere un fattore fondamentale.
La Clausola IN è meno efficiente di un JOIN se poi sommiamo la SubSelect credo possa ulteriormente perdere di ottimizzazione.
Lo strumento di JET che consente l'analisi dei piani di esecuzione non è proprio il massimo ma può essere utilizzato.
Saluti
Delete up richiede che vi sia una integrità referenziale.
Usare la join in realtà ti va a creare un legame dove non hai previsto questa integrità… non ricordo access, ma alcuni db similari ad access per avere integrità referenziale i campi delle tabelle devono avere stesso nome stesso tipo di campo e stessa lunghezza. Con la join basta che siano delle stesse caratteristiche. In teoria, un cliente che sia anche fornitore puoi usare la join per eliminare in base al codice fiscale uguale sia in tab. Clienti che in tab. Fornitori. Magari perché la ditta non esiste più… ma tu non hai nessuna integrità referenziale (non avrebbe senso) tra clienti e fornitori.
In questo caso sostituisci tab a e tab b con clienti e fornitori e i campi con cosicefiscale=codicefiscale…
Io sono arrivato a roma in ogni caso. Quanto al giro, la velocità è solo nello scrivere la query (che scrivi solo una volta risparmiandoti le query parametriche). In esecuzione non fai in tempo a battere le ciglia…