Newsgroup: it.comp.lang.visual-basic
Titolo: Mi aiutate a fare una query.... please?

Il wodkino ha sbroccato e non riesce più ad imbroccarne una....
Aiutatemi a fare una query please!!!
Non mi chiedete perchè le tabelle son così...le ho trovate e ci devono stare
così! Sigh!
Il db è access...vb6 e dao...
La parte che mi interessa è questa
Ho una tabella TestiMarco dove c'è
A) seriale per il testo
b) Memo con un testo
Poi c'è un altra tabella
ManoValori
che contiene
CodSer...serve ad agganciare il testo nella tabella di sopra
TIPO (testo)
Caratteristica (testo)
Valore(testo)
Bene sta tabella "descrive" alcune caratteristiche del testo
Ossia ad esempio
TIPO: "VOCALISMO"
Caratteristica: "Sinizesi"
Valore: "A2"
...oppure
TIPO: "MORF-FLESSIONE NOMINALE"
Caratteristica: "Frequenza assoluta"
Valore: "12/24 (0, 5)"
e altre amenità del genere.......
Bene ....ora il problema
l'utente ha la possibilità di ricercare i testi che soddisfino (da progetto)
al max 3 combinazioni di queste caratteristiche
Che faccio....li faccio fare ad esempio.....
....resto ...della query....
WHERE (
( ( tipo Like 'VOCALISMO' AND caratteristica Like 'Sinizesi' AND valore Like
'*t*' )  )
  AND
( ( tipo Like 'LESSICO' AND caratteristica Like 'Adstrato' AND valore Like
'*t*' )  )
  )
non va! nel senso che l'AND si mangia la condizione (garantisco che il testo
ha per debug i valori sinizesi e adstrato validi!) e ritorna nessun record
...se cambio l'and con l'or mi trova ma logicamente anche altra roba oltre
al testo che dovrebbe ritornare!!
Se volete vedere tutta la query.....ma non ci capirete un acca!
SELECT DISTINCTROW IndiceMano.IDscheda, IndiceMano.CodMano,
IndiceMano.NrMano, schede.*, ManoscrittiMarco.*, TestiMarco.*,
NazioniModerne.nazione, NazioniModerneZone.zona, ZoneCitta.citta,
Autori.Campo1 FROM ((((manoValori RIGHT JOIN ((IndiceTesti INNER JOIN
TestiMarco ON IndiceTesti.IDtesto = TestiMarco.nrTestoSer) INNER JOIN
(schede INNER JOIN (ManoscrittiMarco INNER JOIN IndiceMano ON
(ManoscrittiMarco.CodMano = IndiceMano.CodMano) AND (ManoscrittiMarco.nrmano
= IndiceMano.NrMano)) ON schede.idScheda = IndiceMano.IDscheda) ON
(IndiceTesti.IDnrMano = ManoscrittiMarco.nrmano) AND (IndiceTesti.IDcodMano
= ManoscrittiMarco.CodMano)) ON manoValori.SerialeTesto =
TestiMarco.nrTestoSer) LEFT JOIN Autori ON schede.idAutore = Autori.ID) LEFT
JOIN NazioniModerneZone ON schede.idcodzon = NazioniModerneZone.codzon) LEFT
JOIN NazioniModerne ON schede.idcodnaz = NazioniModerne.codnaz) LEFT JOIN
ZoneCitta ON schede.idcodcit = ZoneCitta.codcit  WHERE ( ( ( tipo Like
'VOCALISMO' AND caratteristica Like 'Sinizesi' AND valo
re Like '*t*' )  )  AND ( ( tipo Like 'LESSICO' AND caratteristica Like
'Adstrato' AND valore Like '*t*' )  )  )
per spiegarvi allora ho fatto:
SELECT TestiMarco.nrTestoSer, TestiMarco.testo, manoValori.Valore
FROM TestiMarco LEFT JOIN manoValori ON TestiMarco.nrTestoSer =
manoValori.SerialeTesto
WHERE (
( ( tipo Like 'VOCALISMO' AND caratteristica Like 'Sinizesi' AND valore Like
'*t*' )  )
  AND
( ( tipo Like 'LESSICO' AND caratteristica Like 'Adstrato' AND valore Like
'*t*' )  )
  )
è la versione depurata ma anche li non mi trova il testo (198 per la
precisione)
che ha valori di Sinizesi ed Adstrato =  "test"
Lo so che è una cazzata...ma a quest'ora e con una fretta incredibile di
consegnare sto "lavorazzo" non mi riesce di trovare una soluzione!
..........Si comincia bene!!!!
Grazie a tutti!

 ha scritto nel messaggio
news:vZJQ9.46057$Q%4.14...@news1.tin.it...
CUT
in pratica sembra che l'AND a concatenare i due "blocchi di condizioni" non
piaccia ad access
WHERE
(  tipo Like 'VOCALISMO' AND caratteristica Like 'Sinizesi' AND valore
Like'*t*'   )
AND
( tipo Like 'LESSICO' AND caratteristica Like 'Adstrato' AND valore
Like'*t*'  )
per lui diventano
Like 'VOCALISMO' And Like 'LESSICO'... logicamente impossibile (o è l'uno o
è l'altro)
Sigh!che ci stanno a fare le parentesi se poi sto caz di cesso fa come gli
pare??????
non so che pesci prendere!
e sono nella cacca fino al collo!

Ciao,
Non conosco l'SQL di Access, però ti propongo una soluzione:
perché non filtri la query con una serie di sottoquery?
La rendi + leggibile, meno incasinata e forse Access la comprenderà un pò
meglio.
Andrea

 ha scritto nel messaggio
news:i%KQ9.58282$R45.2...@news2.tin.it...

più depurata di questa....
SELECT TestiMarco.nrTestoSer, TestiMarco.testo, manoValori.Valore
FROM TestiMarco LEFT JOIN manoValori ON TestiMarco.nrTestoSer =
manoValori.SerialeTesto
WHERE (
( ( tipo Like 'VOCALISMO' AND caratteristica Like 'Sinizesi' AND valore Like
'*t*' )  )
  AND
( ( tipo Like 'LESSICO' AND caratteristica Like 'Adstrato' AND valore Like
'*t*' )  )
  )
Voglio trovare i testi che abbiano
il tipo Vocalismo e la caratteristica Sinezesi e che contengano una t
E ANCHE
i testi che contengano
il tipo lessico e la caratteristica adstrato e che contengano una t
Nel mio database c'è un solo testo che soddisfa ambedue le condizioni
Ossia esistono 2 record della tabella che hanno queste caratteristiche e che
hanno il medesimo numero di nrTestoSer
ma access non trova nulla...
anche se non conosci access (tanto per farmi capire)
tu come la scriveresti con il tuo db preferito?

 tu come la scriveresti con il tuo db preferito?
Allora... visto che non ho ben capito come sono strutturate le
tabelle, ti spiego un pň la mia idea.
Quello che ti suggerisco, in pratica č di selezionare un sovrainsieme
dei dati che ti servono e metterlo nella From della "vera" select, dove
poi filtrerai secondo la condizione che ti manca. In pratica spezzetti
la query in 2 query di cui una( quella nella from ) č un sovrainsieme della
query finale.
Capito che intendo?
Andrea

tu come la scriveresti con il tuo db preferito?
Con sql server o con oracle farei distinte query e le metterei in
union:
SELECT TestiMarco.nrTestoSer, TestiMarco.testo, manoValori.Valore
FROM TestiMarco 
	LEFT JOIN manoValori 
	ON TestiMarco.nrTestoSer = manoValori.SerialeTesto
WHERE tipo Like 'VOCALISMO' 
	AND caratteristica Like 'Sinizesi' 
	AND valore Like '%t%'
UNION
SELECT TestiMarco.nrTestoSer, TestiMarco.testo, manoValori.Valore
FROM TestiMarco 
	LEFT JOIN manoValori 
	ON TestiMarco.nrTestoSer = manoValori.SerialeTesto
WHERE tipo Like 'LESSICO' 
	AND caratteristica Like 'Adstrato' 
	AND valore Like '%t%'
-- 
hth, hal

 ha scritto nel messaggio
news:wvLQ9.46328$Q%4.14...@news1.tin.it...
ALLORA ..poi vado a letto incazzato fradicio!
Benchè non sia un laureato in informatica mi hanno insegnato che quello che
posso ridurre a più query ...lo posso accorpare in un unica query...
Ora benchè sia quasi illeggibile avere una unica query è comodo quando si
tratta di far aggieggiare dei parametri all'utonto.
Bene...allora mi spiegate perchè....
Prendo access faccio 2 query
Test1
SELECT DISTINCTROW TestiMarco.nrTestoSer, manoValori.Valore
FROM manoValori, TestiMarco
WHERE (((TestiMarco.nrTestoSer)=[manoValori].[SerialeTesto]) AND
((manoValori.Valore) Like '*t*') AND
((manoValori.Caratteristica)="Adstrato"));
mi riporta:
184 test dell'adstrato
............
poi ne faccio un altra
Test2
SELECT DISTINCTROW TestiMarco.nrTestoSer, manoValori.Valore
FROM manoValori, TestiMarco
WHERE (((TestiMarco.nrTestoSer)=[manoValori].[SerialeTesto]) AND
((manoValori.Valore) Like '*t*') AND
((manoValori.Caratteristica)="Sinizesi"));
mi riporta
11 623,1 pulchrior TEST (Norberg, Poésie p. 49, n. 19)
9 1,2 copia. 5,1 exiguum. 9,1 iusticiam.
105 Testo di test
184 test della sinezesi
Ora prendo e faccio una terza query
SELECT Test1.nrTestoSer
FROM Test1 INNER JOIN Test2 ON Test1.nrTestoSer = Test2.nrTestoSer;
mi riporta
184
che sarebbe corretto!!!!!
Ok ma come le trasformo queste 3 query in una unica query????
 Porco Access!!!!
(Un wodkino che spera in un aiuto di un qualche Deus Ex Machina)
:o(
Notte ragazzi!


Grazie HAL
...ma UNION
mi aggiunge le righe di una query all'altra....almeno l'UNION che c'č anche
in access!!!!
Invece
SELECT Test1.nrTestoSer
FROM Test1 INNER JOIN Test2 ON Test1.nrTestoSer = Test2.nrTestoSer;
mi trova solo i record comuni a tutte e due le query!
Ora io non sono esperto di DB...e questa query di sopra non la saprei
trasformare in una unica query...e spezzare il tutto in piů query č un opera
titanica!
Mamma mia....che inizio d'anno!!!!!

 al testo che dovrebbe ritornare!!
Certo che non va. Sono tutte AND e quindi puoi togliere tutte le parentesi e
noterai meglio che:
... tipo like 'VOCALISMO' AND tipo like 'LESSICO'  sono in palese contrasto.
Io ho inteso che tu vuoi qualsiasi combinazione dei tre campi per i
rispettivi 3 valori impostati.
Allora (qui sono solo due valori, a parte il campo valore che ne ha solo
uno, per tre campi):
WHERE
( tipo Like 'VOCALISMO' OR tipo Like 'LESSICO')
AND (caratteristica Like 'Sinizesi' OR caratteristica Like 'Adstrato')
AND (valore Like '*t*')
Se ho capito ...


 il tipo lessico e la caratteristica adstrato e che contengano una t
Ok, lo vedi che era solo un errore di logica?
Nella seconda riga sostituisci AND con OR.
-- 
Samuele Battarra
prova il mio newsreader:
http://digilander.iol.it/battarsa/programmi/news/

 il tipo lessico e la caratteristica adstrato e che contengano una t
Ok, lo vedi che era solo un errore di logica?
Tu vuoi i record che soddisfano la prima condizione E ANCHE la seconda.
Detto in altre parole, preso un record questo va bene se soddisfa
le condizioni delle prima riga OPPURE quelle della terza.
Nella seconda riga sostituisci AND con OR e tutto si risolverà.


 ha scritto nel messaggio
news:av0rha$auffs$1...@ID-174464.news.dfncis.de...
Eh no ....magari Lupo!
Io devo trovare i record nella tabella principale...che soddisfano una serie
di condizioni della tabella secondaria
I criteri son validi a righe ossia
per dirla in termini "volgari"
Trovami tutti i testi che abbiano "Adstrato" che contengano una "t"
E CONTEMPORANEAMENTE
abbiano anche una "t" in Sinizesi
Io credevo
 (ma difetto di logica evidentemente)
che le parentesi discriminassero e quindi bastasse racchiudere fra parentesi
le condizioni da verificare e poi combinarle
In realtà forse la ricerca che voglio fare è impossibile (indipendentemente
dal db) da fare con UNA Query!
Infatti se faccio 2 query e le combino...mi riporta ...(come ho detto non te
la ristò a far lunga)....la combinazione giusta.
Ma la cosa strana (per me...ma sono autodidatta e aspetto la bacchettata da
chi conosce bene DB e SQL)
è che logicamente non mi trovo alcuna falla e il mio ragionamento mi sembra
piano....
ossia
( tipo Like 'VOCALISMO' AND caratteristica Like 'Sinizesi' AND valore Like
'*t*' )
mi sembra una condizione che il DB deve interpretare e riporterà VEro/Falso
e.....
( tipo Like 'LESSICO' AND caratteristica Like 'Adstrato' AND valore Like
'*t*' )
Un altra condizione che anche questa valuterà vero/falso
Se quindi aggiungo un ulteriore livello di parentesi
WHERE ( (Bloccocond1) AND/OR (Bloccocond2) )
perchè con OR funziona bene e con AND no????
SIGH!
HELP LUPETTO E GURU DEL DB!!!!!!


in realtà come dice Samuele mi sto arrotolando su me stesso???
scrivo per vedere se penso giusto scsusate prendetela come una lezione ad un
lamerozzo!
Io ho una tabella che per ogni riga elenca caratteristiche di un altro
elemento posto in un altra tabella
nello specifico
TABELLA principale
cod 184
testo ...bla bla
cod 190
testo bla bla 2
TABELLa secondaria
a) 184 Adstrato "Test"
b) 184 Sinizesi "test"
c) 184 Allitterazioni "test"
d) 190 Sinizesi "Test test"
e) 190 Morfoflessione "Test"
Il mio errore è considerare l'AND come se lo facesse su tutta la
tabella...in realtà lo fara sulla singola riga della tabella secondaria
(ossia sul record corrente)
e se li dico di cercare Sinizesi ="*t*" lui mi trova ad esempio il record b)
IL MIO ERRORE
questa riga HA SOLO il valore sinizesi NON posso chiederli "Ma ci ha anche
adstrato?" NO mi risponde!
Perchè?
Perchè adstarto è in un altra riga.... nella a)...ma lui sta testando la b)
SOLUZIONE:
Come diceva HAL e come empiricamente facevo con Acess
devo fare 2 query e combinare i risultati
Ossia:
Cerca tutti gli adstrati
mi trova a) 184
Cerca tutte le sinizesi
mi trova b) 184 e d) 190
Combina i risultati e trova quelli che hanno il solito numero di testo
rimane il solo 184
come ho fatto empiricamente....
Con Access ho  fatto 2 query (test1,test2)
... se le combino per codice testo il DB ci schiaffa un
SELECT Test1.nrTestoSer
FROM Test1 INNER JOIN Test2 ON Test1.nrTestoSer = Test2.nrTestoSer;
MA io viaggiando in SQL che ci schiaffo?
BENE
non lo so fare!!! AMMETTO LA MIA IGNORANZA!!!!
son arrivato fin qui.....
Con UNION
appiccico le due query
ora devo dalla unione di queste 2 query discriminare quelle che hanno il
codice (ad es. 184) in comune!
io son arrivato fin qui:
SELECT DISTINCTROW TestiMarco.nrTestoSer, manoValori.Valore
FROM manoValori, TestiMarco
WHERE (((TestiMarco.nrTestoSer)=[manoValori].[SerialeTesto]) AND
((manoValori.Valore) Like '*t*') AND
((manoValori.Caratteristica)="Adstrato"))
UNION SELECT DISTINCTROW TestiMarco.nrTestoSer, manoValori.Valore
FROM manoValori, TestiMarco
WHERE (((TestiMarco.nrTestoSer)=[manoValori].[SerialeTesto]) AND
((manoValori.Valore) Like '*t*') AND
((manoValori.Caratteristica)="Sinizesi"));
Che mi riporta i Valori della prima Query E i valori della
seconda...........
(ho levato i left join e messo una condizione in where per non incasinarmi
di più)...
ma dal risultato dovrei trovare solo i record che hanno il solito numerodi
codice testo fre le due query!
Sigh!
Ch ignoranza che ho!

E' più che normale che non ti cacci fuori un tubo.
Quell' AND nella condizione where per access, ma
per qualunque altro db significa dove il record
contiene (adstrato e lessico) e (vocalismo e sinezesi)
cosa che da quello che si capisce dalla tua base
dati non è così.
La tabella Manovalori, così come l'hai descritta e
concepita è per una relazione 1 a 1 ... significa che
o hai un valore o ne hai un altro.
Come ti è stato suggerito devi fare 3 query, ma
volendo anche due query.
La prima che ti recupera i valori che hanno vocalismo
e le altre condizioni che vuoi tirar fuori dalla
tabella manovalori... e la seconda query, fatta avendo
come from la tabella testimarco e la query in cui
metti una condizione con l'unico campo che ti lega
le due tabella codser con seriale.
Non sò se mi sono spiegato. Però, non che mi ricordi
bene, ma access con sto genere di cose a volte da problemi.
Alternativa - testata sulla mia prova - è quella di
usare la preposizione IN ...
Ti mando all'e-mail (sperando che sia corretta il
db che ho fatto con dentro le query).
Prendilo come un regalo di natale :)
Ciao
Andrea

 perchè con OR funziona bene e con AND no????
E' molto semplice e se non lo comprendi, visto che non sei l'ultimo arrivato
in VB (sì, ho detto VB!), vuol solo dire che sei un po' fuso. Credo, lo dico
simpaticamente, che sia la verità. Non potrei perdonarti il contrario ;-)
Perchè AND vuol dire che il primo blocco e _anche_ il secondo devono dare
risultato Vero.
L'OR vuol dire che _anche uno solo_ dei due deve essere vero.
Se tu mi scrivi, per esempio, che:
... tipo like 'VOCALISMO' AND tipo like 'LESSICO' ...
ti sei giocato ogni possibilità, indipendentemente da tutto il resto, e non
ti restituirà niente.
Ora, dai, facci quel chiaro esempio, che son curioso...


ti ringrazio
Studio e faccio sapere!

 abbiano anche una "t" in Sinizesi
Partendo dal presupposto che Adstrato e Sinizesi siano valori possibili del
campo Caratteristica e che "t" sia da cercare nel campo Valore e che il
campo Tipo contenga il codice (poi per la sua descrizione vediamo):
WHERE
(Tipo='184' OR Tipo='...' OR Tipo=...)
AND
(Caratteristica='Adstrato' OR Caratteristica='Sinizesi' OR
Caratteristica=...)
AND
(Valore Like '*t*' OR Valore Like '...')

 
Qui fai due query, la prima ti restituisce l'insieme dei valori (184),
la seconda l'insieme dei valori (184, 190), poi fa l'unione tra i due
insiemi, ma a te non serve l'unione, serve l'intersezione!
Una possibile soluzione:
con una query tiri fuori uno dei due insiemi, poi all'altra aggiungi
la condizione che i valori devono essere scelti tra quelli già
restituiti dalla prima.
SELECT DISTINCTROW TestiMarco.nrTestoSer, manoValori.Valore
FROM manoValori, TestiMarco
WHERE (((TestiMarco.nrTestoSer)=[manoValori].[SerialeTesto]) AND
((manoValori.Valore) Like '*t*') AND
((manoValori.Caratteristica)="Adstrato")) AND
(manoValori.SerialeTesto IN
  (
   SELECT manoValori.SerialeTesto FROM manoValori WHERE
      (Valore Like '*t*') AND (Caratteristica="Sinizesi")
   )


 ha scritto nel messaggio
news:vZJQ9.46057$Q%4.14...@news1.tin.it...
.....Infatti č la mia ignoranza al 95%
....e il fatto di essere sotto pressione al 5%!!!!!
Grazie a Andrea e a Samuele...e anche a Lupo e a HAL...a tutti insomma!
Infatti mi arroccavo su me stesso!
Con la Union mi appiccicavo i risultati l'uno su l'altro....
e con la IN mi disfacevo in inutili contorcimenti!
Con la IN di Andrea cominciavo a vedere la luce ...ma oramai fuso mi ci
riportavo tutta la query!inutilmente e erroneamente!
la versione di Samuele funzia perchč giustamente
SELECT DISTINCTROW TestiMarco.nrTestoSer, manoValori.Valore
FROM manoValori, TestiMarco
WHERE (((TestiMarco.nrTestoSer)=[manoValori].[SerialeTesto]) AND
((manoValori.Valore) Like '*t*') AND
((manoValori.Caratteristica)="Adstrato") AND ((manoValori.SerialeTesto) In
(SELECT manoValori.SerialeTesto FROM manoValori WHERE
      (Valore Like '*t*') AND (Caratteristica="Sinizesi")
   )));
pensa un po che io nella IN ci risbattevo tutta la query!
(e a mio disonore ero entrato nel tunnel della EXISTS)
Purtroppo la preparazione ed il tran tran quotidiano ti fa privilegiare
alcune cose e dimenticare altre....era da un bel po che non trafficavo con
una query di questo tipo e (a mio disonore) avevo completamente dimenticato
la IN!
Grazie della pazienza....ritenetevi tutti debitori di una bevuta offerta dal
wodkino!!!!!
(Wodkino che rivede la luce)
:o)

    )));
Scusa wodka (non certo per voler essere presuntuoso), ma questa mi pare
ottenga gli stessi risultati dell'ultima mia, che mi sembra piů pulita e
sicuramente piů performante. Sbaglio, nel senso che si ottengono risultati
diversi? Mi interessa per capire.
La mia proposta era:


 (Valore Like '*t*' OR Valore Like '...')
cut
EH EH!
Attento Lupo non cadere nel solito errore mio!
la situazione è che te hai una tabella principale e correlata un altra
secondaria che può avere più righe per descrivere una riga di quella
principale
...
anche io ragionavo in maniera "canonica" come l'uso mi ha costretto a
fare....
In realtà come dicevano Andrea e Samuele io non posso fare una unica
ricerca....
Io devo fare una ricerca per un valore contenuto nella secondaria e mi
riporta un insieme A
POI
devo fare una ricerca SEMPRE (ecco l'errore mio) sulla secondaria per altri
valori e mi riporta l'insieme B
POI per ultima cosa
DEVO INTERSECARE I VALORI (altra cosa che avevo dimenticato)
ossia trovare A And B
Questo si fa con
WHERE (((TestiMarco.nrTestoSer)=[manoValori].[SerialeTesto]) AND
((manoValori.Valore) Like '*t*') AND
((manoValori.Caratteristica)="Adstrato")) AND
(manoValori.SerialeTesto)
IN
  (
   SELECT manoValori.SerialeTesto FROM manoValori WHERE
      (Valore Like '*t*') AND (Caratteristica="Sinizesi")
   );
l'interessante è dalla IN in poi
Col tuo metodo che poi era anche una delle prove che avevo fatto non si va
avanti...perchè questi valori non sono valori di campi del medesimo record
ma valori dello stesso campo su record diversi (che poi accidentalmente si
riferiscono anche al medesimo record principale...ma non solo!)
In buona sostanza col tuo/mio metodo si trovano FORSE anche i record che
soddisfano (ma non è detto) ma anche tanti altri record che non c'entrano
nulla!!!!
per me....E' stato un parto Lupo lasciamelo dire!
Mi son giocato  gli unici 2 neuroni rimasti!
:-)

Ok ... dimmi dove e quando :))
Ciao
Andrea

Lupo ha scritto:

Riprendi il seguente esempio.
TABELLa secondaria
   COD TIPO CARATTERISTICA VALORE
a) 184      Adstrato       "Test"
b) 184      Sinizesi       "tost"
c) 184      Allitterazioni "test"
d) 190      Sinizesi       "Test test"
e) 190      Morfoflessione "Test"
dove tipo č omesso per rendere piů semplice l'esempio.
La tua query (sempre omettendo la riga con le condizioni per tipo)
restituisce le righe a, b, d; la mia restituisce solo la a (o solo la b)
a seconda di quale delle due condizioni venga messa nella query piů
interna.
A ben guardare una query cosě č poco utile, perchč per il secondo campo
richiesto dalla query esterna viene restituito un VALORE solo, che nel
caso specifico potrebbe essere sia "Test" che "tost" a seconda della
condizione della query piů interna.
Una cosa piů utile potrebbe essere:
SELECT SerialeTesto
FROM manoValori
WHERE (Valore Like '*t*') AND
      (Caratteristica = "Adstrato") AND 
      (SerialeTesto IN
         (SELECT SerialeTesto FROM manoValori WHERE
            (Valore Like '*t*') AND (Caratteristica="Sinizesi")
         ))
in cui vengono estratti solo i codici degli elementi interessati.
Di cui a questo punto si puo estrarre anche il testo con una join
SELECT Testo, SerialeTesto
FROM manoValori INNER JOIN TestiMarco ON 
     manoValori.SerialeTesto = TestiMarco.nrTestoSer
WHERE (Valore Like '*t*') AND
      (Caratteristica = "Adstrato") AND 
      (SerialeTesto IN
         (SELECT SerialeTesto FROM manoValori WHERE
            (Valore Like '*t*') AND (Caratteristica="Sinizesi")
         ))
ho, volendo, tutti i valori relativi
SELECT * FROM manoValori
WHERE SerialeTesto IN
(
SELECT SerialeTesto
FROM manoValori
WHERE (Valore Like '*t*') AND
      (Caratteristica = "Adstrato") AND 
      (SerialeTesto IN
         (SELECT SerialeTesto FROM manoValori WHERE
            (Valore Like '*t*') AND (Caratteristica="Sinizesi")
         ))


 ha scritto nel messaggio
news:52329.2003...@news.tin.it...
Non chiedo nulla! lo posto casomai servisse a qualcuno che come me ci passa
per ste "forche caudine"!!!!
.... a me parrebbe funzionare in maniera giusta
La complicazione per testare 3 condizioni (ragà sti professori universitari
rompono eh!) è.....
SELECT DISTINCTROW serialetesto,testo
FROM manovalori
INNER JOIN TestiMarco ON
ManoValori.SerialeTesto=TestiMarco.nrTestoSer
WHERE
(Valore like '*t*' AND Caratteristica='Dieresi')
AND
serialetesto IN
 (
    SELECT manoValori.SerialeTesto FROM manoValori WHERE
      (Valore Like '*t*') AND (Caratteristica="Adstrato")
)
AND
serialetesto IN
 (
    SELECT manoValori.SerialeTesto FROM manoValori WHERE
      (Valore Like '*t*') AND (Caratteristica="Sinizesi")
)
;
...parrebbe potersi espandere ad altre ulteriori condizioni......ma io mi
fermo (mi chiedevano 3 condizioni max.....eccole...grrrrr!)
Grazie di nuovo a tutti!
:o)

 dove tipo č omesso per rendere piů semplice l'esempio.
La scelta del tipo era invece fondamentale, tant'č che era la prima
condizione nella mia query.
Comunque non insisto,  approfondirň.


Vediamo se ci ho capito qualche cosa, hai 2 tabelle
PrimaTabella (composta da 2 campi):
Seriale
Memo
SecondaTabella (composta da  4 campi):
CodSer (corrisponde a Seriale della prima tabella)
Tipo
Caratteristica
Valore
Tu vuoi cercare nella prima tabella tutti i record che nella seconda tabella
corrispondono per es, al seguente criterio:
Estrai tutti i record il cui campo Caratteristica contiene Sinizesi e il cui
campo Valore contiene la lettera t oppure tutti i record il cui campo
Caratteristica contiene Adstrato e il cui campo Valore contiene la lettera
t,
Cominciamo eseguendo la query sulla seconda tabella:
SELECT *
FROM SecondaTabella
WHERE
(Caratteristica Like "Adstrato*" AND Valore Like "*t*") OR
(Caratteristica Like "Sinizesi*" AND Valore Like "*t*")
Questa estrae i record che corrispondono al filtro, per legarla alla prima
tabella basta aggiungere la Join tra le 2 tabelle
FROM SecondaTabella INNER JOIN PrimaTabella ON SecondaTabella.CodSer =
PrimaTabella.Seriale.
Ti allego la query completa per chiarezza (Copia e incolla da Access, quindi
funge):
SELECT *
FROM SecondaTabella INNER JOIN PrimaTabella ON SecondaTabella.CodSer =
PrimaTabella.Seriale
WHERE (((SecondaTabella.Caratteristica) Like "Adstrato*") AND
((SecondaTabella.Valore) Like "*t*")) OR (((SecondaTabella.Caratteristica)
Like "Sinizesi*") AND ((SecondaTabella.Valore) Like "*t*"));
Ciao
VB

 VB
Forse č meglio cosě:
SELECT distinct PrimaTabella.Seriale, PrimaTabella.Memo
FROM PrimaTabella INNER JOIN SecondaTabella ON PrimaTabella.Seriale =
SecondaTabella.CodSer


 ha scritto nel messaggio
news:av16f9$ob1$1...@serv1.albacom.net...
NO!
se leggi tutti i post vedi quello che volevo fare...in 2 o 3 lo spiego bene!
e che con l'aiuto di Samuele e Andrea ho fatto!
Fino a quello che dici tu ci siamo arrivati in tanti!....ma non è quello che
si deve fare!
Con il tuo/mio/lupo sistema si trovano dati sbagliati.....
:o)

 abbiano anche una "t" in Sinizesi
Ho riletto tutto e ho capito cosa volevi ottenere. Chiaramente Samuele ha
indovinato (uso volutamente questo termine perchè ho sempre frainteso). Io
avrei scritto la richiesta in questo modo:
Voglio trovare, _prioritariamente_, tutte le righe con Valore Like '*t*' e
Caratteristica='Adstrato'. Di queste devo considerare _solo_ quelle il cui
Tipo sia uguale al Tipo delle righe con Valore Like '*t*' e
Caratteristica='Sinizesi'
Non mi era chiara la prevalenza della prima scelta ('Adstrato'), quella che
determina la prima scrematura. Consideravo, cioè, di identica valenza le
caratteristiche 'Adstrato' e 'Sinizesi'. Ecco il motivo del mio OR sui
possibili valori del campo Caratteristica.


......
Buon vecchio Lupo che non si smentisce mai!
:o)
Se vuoi ti dico di si...e la finiamo qui!
Però lo sai ....come son fatto!
Se la vogliamo continuare per sola accademia...
Vediamo se mi riesce essere ancora più chiaro.....
fai cosi Lupo
Prendi Access (è con quello che devo fare il tutto)
Fati una tabella
Chiamala: Testo
2 campi dentro
CodiceTesto (numerico)
Testo (memo)
Un altra tabella
Chiamala: ValoriTesto o CaratteristicheTesto
Dentro ci metti i campi:
CodiceTesto(numerico)
Tipo (carattere)
Valore (carattere)
Se proprio ci vuoi mettere una relazione...falla uno a molti ..1 testo Molte
caratteristiche!...altrimenti falla direttamente nella query!
Ora Caricale così
Tabella: testo
CodiceTesto     Testo
1                      Testo di prova numero1
2                       Testo numero 2
3                      Testo numero 3
Tabella: ValoriTesto
Codicetesto,Tipo,Valore
1, "Adstrato", "Test Adstrato"
1, "Dieresi", "Test nuova dieresi"
3, "Adstrato", "Test Adstrato num 2"
3, "Sinizesi","Test della sinizesi"
2, "Sinizesi","Test della sinizesi num 2"
2, "Scambi a/e"", "Test delli scambi"
2, "Dieresi", "test della dieresi"
Ci siamo ? OK!
Ora sta roba serve a dei professori per fare delle ricerche.....
Loro vogliono trovare tutti i testi che soddisfano alcune determinate
condizioni...ossia che abbiano ben determinate caratteristiche!
Da progetto al max 3 combinazioni (facciamola per 2 sole per non complicarci
ora la vita)
Il bravuomo che fa?... si mette davanti al form di raccolta dati e
digita(sceglie)
ad esempio:
Trova i testi che soddisfano ambedue le condizioni
Opzione 1: Sinizesi che contiene *t*
Opzione 2: Dieresi che contiene *t*
la risposta è
la prima opzione troverebbe 3 , 2
la seconda opzione troverebbe 1, 2
Quindi il testo che soddisfa ambedue le opzioni è il 2...che come diceva
Samuele è l'intersezione dei due insiemi!
Non c'è prevalenza....la costruisco al volo a seconda di quello che sceglie
il professore!Ecco perchè volevo una unica query!
Ora prova a farla con una sola query (senza  query intermedie memorizzate)
che riporti solo 2 e vedrai che la fai come Samuele!
Tutti i where che mi hai proposto erano i where che avevo già
sperimentato(qualcosa ricordo eh!) e li è una strada chiusa!
E' che non ricordavo (l' ho usato pochissimo)
come funziona
IN
....io ho ammesso la mia ignoranza!!!!
Lupo non c'è nulla di male se anche tu non ti ricordi IN
...nel mio caso è ignoranza nel tuo sarà di sicuro un lapsus momentaneo!
Ma non mi venire a dire che mi spiego male.....ho fatto per ben 3 volte
esempi.....infatti Samuele e Andrea hanno capito!
Lo dico senza astio e coprendomi il capo di cenere Lupo!...non ti offendere!
Solo per scrivere qualcosa prima di andare a letto!
....Notte!
:o)

 Lo dico senza astio e coprendomi il capo di cenere Lupo!...non ti
offendere!
Offendermi? Ma ci mancherebbe... :-)