query di eliminazione

Anonimo
2011-09-07T08:16:18+00:00

salve devo eliminare i record di una tabella che non hanno una corrispodenza in una seconda tabella :

mi spiego meglio

ho due tabelle

TABELLA A con i seguenti campi: codice e descrizione

TABELLA B con i seguneti campi: codice , luogo , data di arrivo

in pratica devo eliminare dalla tabella A tutti quei record che non hanno il codice nella tabella B

per prima cosa ho creato una query di selezione tra le due tabelle creando una join da tabella A a tabella B con una relazione di 1 a molti.

ho converito la query di selezione in query di annullamento e ho inserito come tabella da eliminare tutta la tabella A e come criterio di eliminazione ho messo Campo: codice  Tabella B  Criterio is null (in pratica avendo creato una relazione di 1 a molti seleziono i recordi di tabella A che hanno un codice nella Tabella B vuoto e che quindi sono da eliminare)

se visualizzo la query mi restituisce correttamenti i campi da eliminare ma se faccio esegui query mi da il seguente errore

impossibile eliminare dalle tabelle specificate e cliccando sul punto interrogativo mi da l'errroe 3086

faccio presente che

1 - quando eseguo la query di eliminazione le tabell A e B sono chiuse

2 - sia il campo codice nella tabella A che nella tabella B sono definiti con lo stesso tipo dati (SONO DEFINITI COME TESTO)

non so niente di visual basic ( in pratica le query le creo cliccando sul pulsante crea il alto (dove c'è anche home dati esterni e strumenti di database)

come posso fare per risolvere il problema?

GRAZIE PER L'AIUTO

Microsoft 365 e Office | Access | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2011-09-07T08:48:56+00:00

Ciao Daniele,

prova a creare la query in questo modo:


DELETE DISTINCTROW TabellaA.*

FROM TabellaA LEFT JOIN TabellaB ON TabellaA.Codice = TabellaB.Codice

WHERE TabellaB.Codice Is Null;


David

La risposta è stata utile?

9 persone hanno trovato utile questa risposta.
0 commenti Nessun commento

8 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2017-03-21T16:51:16+00:00

    WHERE e non WERE.

    Per il resto controlla bene che nel caso di valori stringa questi siano passati tra apici

    David

    La risposta è stata utile?

    1 persona ha trovato utile questa risposta.
    0 commenti Nessun commento
  2. Anonimo
    2011-09-07T14:35:09+00:00

    grazie

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2011-09-07T10:07:42+00:00

    Ciao Daniele,

    non è che ci sia molto da spiegare: la query che hai visto utilizza il normale linguaggio sql. Ha il vantaggio di far capire ad Access che la tabella da cui eliminare i dati è la TabellaA. In effetti se guardi la query in visualizzazione struttura ti accorgerai che sotto il TabellaA.* alla riga "Elimina", trovi scritto "DA"

    Scrivendo la stessa query di eliminazione in questo modo


    DELETE TabellaA.Codice, TabellaB.Codice

    FROM TabellaA LEFT JOIN TabellaB ON TabellaA.Codice = TabellaB.Codice

    WHERE TabellaB.Codice Is Null;


    vedrai che sotto il campo Codice della TabellaA, nella sezione "Elimina" trovi scritto "Dove" e anche se apri la tendina, non avrai possibilità di modificarlo in "Da". La query così creata ti restituisce l'errore "Specificare la tabella contenente i record da modificare".

    Questo tipo di codice ti tornerà utile in particolare ogni volta che ti capiterà di creare una query di eliminazione che prevede delle tabelle in join.

    David

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2011-09-07T09:15:13+00:00

    ok perfetto funziona

    mi potresti spiegare i comandi che hai usato ?

    grazie

    La risposta è stata utile?

    0 commenti Nessun commento