Problema con Query di Eliminazione

di il
5 risposte

Problema con Query di Eliminazione

Buongiorno a tutti,
ho un curioso problema con una query di eliminazione, spero che qualcuno mi possa aiutare.

Data la tabella "tab_ordini_in_corso" con i seguenti campi:
[ID] [N_ORDINE] [QTA_ORDINE]
1 375 10
2 218 100
3 400 15

e data la query di selezione "q_aggiornamento_ordini" con i medesimi campi della tabella sopra citata, dovrei cancellare dalla tabella i record con ID che non sono presenti nella query. Riporto l'SQL generato con la creazione della query di eliminazione:

DELETE tab_ordini_in_corso.*, q_aggiornamento_ordini.ID
FROM tab_ordini_in_corso LEFT JOIN q_aggiornamento_ordini ON tab_ordini_in_corso.ID = q_aggiornamento_ordini.ID
WHERE (((q_aggiornamento_ordini .ID) Is Null));

Ora, se faccio l'anteprima dell'eliminazione, mi vengono fuori esattamente i record con ID che non esistono nella query ma al momento di effettuare la cancellazione vera e propria, mi compare l'errore: "Impossibile Eliminare dalle Tabelle Specificate".

Ho provato una cancellazione completa senza condizioni per verificare se il problema fosse della tabella ma in questo caso è andato tutto a buon fine, la tabella è stata svuotata completamente.

Sicuramente sbaglio qualcosa ma non riesco a capire cosa... qualcuno mi potrebbe dare qualche suggerimento in merito?
Grazie in anticipo

5 Risposte

  • Re: Problema con Query di Eliminazione

    Hai provato a scriverla in questo modo:
    
    DELETE * FROM tab_ordini_in_corso
    WHERE tab_ordini_in_corso.[ID] NOT IN 
      ( SELECT q_aggiornamento_ordini.ID FROM q_aggiornamento_ordini );[Code]
  • Re: Problema con Query di Eliminazione

    Ciao @Alex! Grazie per la risposta!
    La tua soluzione funziona, ora l'eliminazione dei record viene eseguita senza problemi.
    Solo una domanda: premesso che la tabella contiene in totale 106 record mentre quelli da cancellare sono solo 4, è normale che il procedimento sia un po' lento? Per darti un'idea, dall'avvio alla conclusione dell'elaborazione passano circa 15 secondi.
    Per info, la query "q_aggiornamento_ordini" prende direttamente i dati da un DB SQL Server.
    Grazie mille!
  • Re: Problema con Query di Eliminazione

    No non è affatto normale.
    Dovrewsti realizzare in SQL_Server una SP, oppure eseguire la Query in modalità PassTrought per verificarne l'efficienza.

    Tuttavia non so come sia creata la Query di cui parli, purtoppo spesso si confonde il Server con il Client e si realizzano Query disfunzionali... es:
    
    SELECT * FROM dbo.NomeTabella WHERE ID=Forms!NomeForm!NomeControllo
    Questa Query sebbene tu abbia dietro SQL_Server viene elaborata da JET in locale, e di questi errori purtroppo spesso se ne commettono per inesperienza.
    Non so se possa essere o meno il tuo caso... ma se denunci 15secondi è fuori da ogni ragionevole funzionalità con quel numero di Records.
  • Re: Problema con Query di Eliminazione

    Risolto! C'era un campo nella query con un DSum che rallentava il tutto (purtroppo, mettere le mani su lavori di altri è estenuante, si trovano delle cose agghiaccianti ). Modificato il campo, la query di eliminazione è stata elaborata immediatamente.

    Grazie per l'aiuto @Alex!
  • Re: Problema con Query di Eliminazione

    henrytrnn ha scritto:


    Risolto! C'era un campo nella query con un DSum che rallentava il tutto (purtroppo, mettere le mani su lavori di altri è estenuante, si trovano delle cose agghiaccianti ). Modificato il campo, la query di eliminazione è stata elaborata immediatamente.

    Grazie per l'aiuto @Alex!
    Tipico l'uso di Funzioni di aggregazione sui domini per chi è poco esperto, ma non sono scalabili nè risolvibili Server Side.
    Bene.
Devi accedere o registrarti per scrivere nel forum
5 risposte