Newsgroup: it.comp.lang.visual-basic
Titolo: [DAO] help su query SQL

ciao!
ho una tabella Access (DAO) devo effettuare una query che mi risulta
difficile da spiegare a parole... un
esempio dovrebbe (dovrebbe) chiarire il problema:
campo1    campo2     campo3
1              A                 altri dati
2              A                 altri dati
2              B                 altri dati
2              A                 altri dati
3              B                 altri dati
3              B                 altri dati
se eseguo la query considerando campo1 = 2 e campo2 = "A" non mi deve
restituire alcuna riga poichè non *tutte* le righe con campo1 = 2 hanno il
campo2 = "A".
invece se considero campo1 = 3 e campo2 = "B" allora mi ritornerà le due
righe poichè entrambe ( = tutte) hanno la B nel campo2.
qual è l'interrogazione SQL corretta ?
grazie,
Marco

 ha scritto nel messaggio
news:64LG9.48852$2B1.1...@twister2.libero.it...

Select *
from tabella
where campo1=1
and campo2='A'
and not exists (select 1 from tabella where campo1=1 and campo2<>'A')
Ciao
Alberto

 and not exists (select 1 from tabella where campo1=1 and campo2<>'A')
fantastico! grazie, non conscevo la parola exists!
approfitto ancora un attimo della tua disponibilità... se volessi modificare
la query in modo che esegua la verifica su tutte le righe e non solo su
quelle filtrate da campo1 come dovrei fare ? cioè io imposto il campo2 e lei
mi cerca tutte le righe (raggruppate per campo1) che hanno tutte il campo2 =
"A".
grazie ancora!
Marco

 ha scritto nel messaggio
news:mILG9.49002$2B1.1...@twister2.libero.it...

Non ho ben chiaro quello che vuoi.
forse qualcosa, molto semplice, del genere:
Select *
from tabella
where campo2='A'
order by campo1
se per 'raggruppate per campo1' intendi 'ordinate per campo1'.
Ciao
Alberto

 ha scritto nel messaggio
news:W3MG9.47387$3l.13...@twister1.libero.it...

Vediamo...
la prima che ti avevo postato era quasi giusta:
Select A.*
from tabella as A
where A.campo2='A'
and not exists (select 1 from tabella as B where A.campo1=B.campo1 and
B.campo2<>'A')
order by A.campo1
Se invece vuoi solo l'elenco dei Campo1 che soddisfano il requisito, senza
l'elenco completo delle righe, e magari con un conteggio delle occorrenze:
Select A.campo1, count(1) As Occorrenze
from tabella as A
where A.campo2='A'
and not exists (select 1 from tabella as B where A.campo1=B.campo1 and
B.campo2<>'A')
group by A.campo1
Ciao
Alberto

 order by A.campo1
ok, questa è perfetta (almeno così mi pare....) l'ho provata direttamente in
access e mi restituisce esattamente le righe che mi interessano. thx!
ora rimane l'ultimo problema (di sintassi immagino) da risolvere...
in realtà questa query è l'argomento di un'istruzione IN, che se ho capito
bene dalla guida, permette di includere nella query le righe il cui campo
esaminato è contenuto nello spazio dei valori dell'argomento dell'istruzione
IN. ora *immagino* che faccia dei casini dal momento che usiamo le due
tabelle temporanee (ma qual è il nome corretto ?) A e B. dico così visto che
usandola in VB come argomento appunto dell'istruzione IN mi restituisce
sempre un recordset vuoto quando sono certo non debba essere così. devo
tener conto di qualcosa in particolare riguardo la sintassi da usare oppure
mi sfugge qualcos'altro ?
ciao e grazie!
Marco

 mi sfugge qualcos'altro ?
Ti sfugge qualcosa d'altro.
L'operatore IN esegue un confronto fra dati.
Cosa metti davanti all'IN?
Diciamo, ad esempio, un campo di tipo numerico, ad esempio un contatore?
Allora, nella select all'interno dell'IN, dovrai estrarre solamente l'elenco
dei contatori.
In sostanza, dovrai sostituire a A.* il campo che ti serve, ad esempio
A.Contatore
Ma senza conoscere la query complessiva posso fare poco.
Ciao
Alberto

 Ma senza conoscere la query complessiva posso fare poco.
hai fatto molto, altrochč!
era proprio questo il problema, č stato sufficiente aggiungenere A.campo che
tutto funziona alla perfezione. Avevo interpretato male la descrizione
dell'operatore IN letta sulla guida.... chiedo venia!
mi spiace solo di non poter ricambiare.... mi sei stato di grande aiuto.
alla prox!
Marco