Newsgroup: it.comp.appl.access
Titolo: Query con tabelle collegate

 
Buongiorno,
con due tabelle collegate dal campo IDxxx (contatore nella prima,
Intero lungo nella seconda) per favore qualcuno mi può dare
l'istruzione per la query per estrarre dalla seconda tutti i record in
cui il valore di IDxxx non è presente nella prima? (alcuni record
della prima sono stati cancellati inavvertitamente senza che si siano
cancellati i record con lo stesso IDxxx nella seconda, per cui li devo
cancellare 'a mano' con la query).
Mi pare di ricordare qualcosa del tipo LEFT JOIN etc. ma non sono
sicuro.
Grazie
Filippo
 

 ...
 
 Record di A non presenti in B
 
http://www.donkarl.com/it?FAQ3.16
 
 
-- 
Ciao
Karl
*********
Access FAQ:  
http://www.donkarl.com/it
 
 

 Access FAQ:  
http://www.donkarl.com/it
 
 
Grazie Karl, ma il mio problema è un po' diverso.
Io devo eliminare dalla tabella B quei record il cui IDxxx (con il quale la tabella era collegata alla tabella A) non corrisponde più a IDxxx nella Tabella A perché il relativo record è stato cancellato.
Il collegamento da A a B era uno-a-molti. Ho cancellato il record di A e non mi si sono cancellati i molti collegati di B. Adesso li devo cancellare a mano, cercando quelli il cui IDxxx di collegamento non ha più la corrispondenza in A perché il record con quell'IDxx non esiste più
Come devo fare? 
Grazie
Filippo

 quell'IDxx non esiste pi�
 
SELECT B.*
FROM B LEFT JOIN A ON B.IDxxx = A.IDxxx
WHERE A.IDxxx  Is Null
 
o come query di cancellazione:
 
DELETE B.*
FROM B LEFT JOIN A ON B.IDxxx = A.IDxxx
WHERE A.IDxxx  Is Null


 - Mostra testo citato -
 
Salve Filippo....
Potresti utilizzare, per le prossime volte, l'opzione "Applica
integrità referenziale" e Aggiorna campi e Elimina record correlati a
catena, nella sezione "Relazioni"; in questo modo ogni volta che
modifichi i campi e record della tabella A, tutti i record correlati
nella tabella B vengono aggiornati o eliminati.
Saluti
M7a1x

M7a1x
 
 
Ciao,
il mio problema infatti era proprio questo: avevo applicato
l'integrit� referenziale ed era tutto ok ma poi per ragioni che
ignoro, qualcuno la aveva tolta ed � successo ilfatto che ho
raccontato.
Adesso non mi � possibile riapplicarla perch� mi appare il messaggio
'Impossibile applicare.... " etc, "I dati nella tabella B non sono
compatibili... " etc. 
Questo ritengo mi succeda proprio per il fatto che i record non si
sono cancellati automaticamente e adesso il campo di unione (IDxx)
presenta valori che non esistono nella tabella principale, ecco perch�
devo cancellarli manualmente e poi, certamente, riapplicare
l'integrit� referenziale come suggerisci.
Adesso prover� a cancellare con la Query di Karl.
Grazie a tutti
Filippo
 
 


Buongiorno Karl, e grazie dell'interessamento, ma la tua soluzione non
funziona.
 
Infatti con la Query di Selezione, non mi appare nessun record, mentre
io li vedo positivamente nella tabella B (che si chiama Prestazioni)
diversi record con l'IDParcella avente un valore che non corrisponde
pi� ad un record della prima tabella A (che si chiama Parcelle), che
aveva il contatore IDParcella.
La query � quella che mi hai suggerito:
 
SELECT Prestazioni.*
FROM Prestazioni LEFT JOIN Parcelle ON
Prestazioni.IDParcella=Parcelle.IDParcella
WHERE Prestazioni.IDParcella Is Null;
 
ma non riesco a estrarre da Prestazioni quei record che non hanno pi�
alcun riferimento o record corrispondente in Parcelle.
Grazie se mi potrai aiutare
Filippo
 
 
 

 wrote:
 

Aggiungo (vedi il post che segue) che questa Query:
 
SELECT Prestazioni.*
FROM Prestazioni LEFT JOIN Parcelle ON
Prestazioni.IDParcella=Parcelle.IDParcella
WHERE Prestazioni.IDParcella Is Null;
 
mi estrare tutti i record di Prestazioni (Tabella B) in cui il campo
IDParcella sia vuoto e non anche i recordo in cui il campo IDParcella
abbia un valore numerico che non corrisponde pi� ad alcun record di
Parcelle (Tabella A), perch� � stato cancellato. Ovviamente IDParcella
nella tabella Parcelle (Tabella A) era il contatore
Grazie
 

 ...
 
dev'essere
 
SELECT Prestazioni.*
FROM Prestazioni LEFT JOIN Parcelle ON
Prestazioni.IDParcella=Parcelle.IDParcella
WHERE Parcelle.IDParcella Is Null


WHERE Parcelle.IDParcella Is Null
 
Hai perfettamente ragione, sbagliavo io.
Grazie mille
Ciao
Filippo