Newsgroup: it.comp.appl.access
Titolo: Aiuto per stringa SQL

Buonasera. Uso A00 su W2000.
Ho una combo con origine la seguente stringa SQL:
SELECT TblOrdini.Lotto, TblOrdini.CodBB, TblRArticoliFase.Fase,
TblCodiciLavorazioniEsterne.DescrizioneLavorazione,
TblRArticoliFase.CodiceLavEsterna, TblOrdini.QTaOrdine,
TblOrdini.Descrizione, TblCodiciLavorazioniEsterne.UnitaMisura
FROM (TblOrdini INNER JOIN TblRArticoliFase ON TblOrdini.CodBB =
TblRArticoliFase.CodBB) INNER JOIN TblCodiciLavorazioniEsterne ON
TblRArticoliFase.CodiceLavEsterna =
TblCodiciLavorazioniEsterne.CodiceLavorazione
WHERE (((TblOrdini.Finito)<>-1))
ORDER BY TblOrdini.Lotto;
Funziona, ma vorrei anche poter imporre un ulteriore condizione: non devono
essere visualizzate le righe in cui i valori di TblOrdini.Lotto e di
TblRArticoliFase.Fase sono già presenti negli stessi campi di un'altra
tabella. Come fare?
Gianluigi Agostini

 tabella. Come fare?
Vedi sull'help "Sottoquery"
Sib
--
----------------------------------------------------
la mia home:
http://digilander.iol.it/syb
----------------------------------------------------
il sito comune di it.comp.database.access:
http://www.sitocomune.com
----------------------------------------------------
4000 anni fa', il saggio egizio Ptahhotep scrisse:
"... perche' non esistono saggi per nascita."
------------------------------------------------------
Saturiamo ECHELON:
bomba saddam attentato medio oriente


Ciao e grazie per la risposta. Avevo già provato, seguendo l'help e il
newsgroup che ho scaricato per intero e pesa davvero tanto oro quanto pesa
(27.255 Kb...), ma senza giungere alla soluzione. In particolare avevo
scritto:
SELECT TblOrdini.Lotto, TblOrdini.CodBB, TblRArticoliFase.Fase,
TblCodiciLavorazioniEsterne.DescrizioneLavorazione,
TblRArticoliFase.CodiceLavEsterna, TblOrdini.QTaOrdine,
TblOrdini.Descrizione, TblCodiciLavorazioniEsterne.UnitaMisura
FROM (TblOrdini INNER JOIN TblRArticoliFase ON TblOrdini.CodBB =
TblRArticoliFase.CodBB) INNER JOIN TblCodiciLavorazioniEsterne ON
TblRArticoliFase.CodiceLavEsterna =
TblCodiciLavorazioniEsterne.CodiceLavorazione
****WHERE (((TblOrdini.Lotto) Not In (SELECT Lotto From TblRigheDDT)) AND
((TblOrdini.Finito)<>-1))****
ORDER BY TblOrdini.Lotto;
Non funziona, nel senso che non restituisce NESSUN record, e non capisco
perchè, poichè se scrivo:
Select TblOrdini.lotto from TblOrdini
WHERE (((TblOrdini.Lotto) Not In (SELECT Lotto From TblRigheDDT)) AND
((TblOrdini.Finito)<>-1)), funziona, restituendomi correttamente i valori di
lotto presenti in TblLotto ma non in TblRigheDDT
Inoltre non avrei comunque risolto il mio problema, poichè ho necessità di
effettuare il controllo sul valore contemporaneo di DUE campi tra la stringa
SQL e la tabella RigheDDT, escludendo le corrispondenze.
Inoltre sono alle prime armi con SQL....
Grazie per ogni ulteriore aiuto
Gianluigi Agostini


Potresti fare un'ulteriore outer join in cui stabilisci come criterio di
unione i 2 campi più l'id dei records
es
select * from tab1 left outer join tab1 tab2 (è un alias)
on tab1.Lotto = tab2.CampoLotto2 and  tab1.Fase = tab2.CampoFase2  and
tab1.idrec = tab2.idrec where tab2.idrec ii null

 Inoltre sono alle prime armi con SQL....
Male, molto male ;-)


 Sib
Ciao e grazie per l'interessamento. Ho provato a scrivere: (Dove query è
tutta la select principale, salvata appunto in una query a se stante per più
chiarezza)
SELECT Query.Lotto, Query.CodBB, Query.Finito, Query.Fase
FROM Query
WHERE (((Query.Lotto) Not In (SELECT Lotto From TblRigheDDT)) AND
(Query.Fase) Not In (SELECT Fase From TblRigheDDT))
Sintatticamente è a posto, ma restituisce i record di Query che non hanno nè
un lotto nè una fase corrispondenti in TblRigheDDT, ma considerandoli
slegati tra loro (ovvero toglie tantissimi record in più).
Se invece scrivo:
SELECT Query.Lotto, Query.CodBB, Query.Finito, Query.Fase
FROM Query
WHERE (((Query.Lotto, Query.fase) Not In (SELECT Lotto, fase From
TblRigheDDT)))
ottengo un errore "Non Definito": rivolgersi all'assistenza
Microsoft........((((
....qualcuno che si muova a pietà e mi scriva la corretta sintassi per fare
in modo che di una query io veda solo i record che non presentano gli stessi
valori relativamente a due campi in un'altra tabella.
Grazie
Gianluigi Agostini

 valori relativamente a due campi in un'altra tabella.
Come ti ho gia' detto, tu gli hai chiesto di prendere i record in cui
entrambi i campi non corrispondono, se vuoi che prenda anche i record in cui
anche un solo campo non corrisponda devi mettere un OR e non un AND


 Sib
Grazie per la pazienza, m ancora non ci siamo. Anche mettendo l' OR, vengono
esclusi record in piů. Nella tabella di confronto, nella quale ci sono i
record che non voglio che appaiano, ce ne sono 22, mentre la query
strutturata con l'OR me ne esclude una cinquantina.  In linguaggio umano, mi
sembra di capire che la differenza č tra dire: escludi i record dove campoA
= X ed ANCHE (AND) i record dove campoB = Y, piuttosto che escludi i record
dove campoA=X OPPURE (OR) dove campoB =Y. A me invece serve escludere i
record che contemporaneamente hanno lo stesso valore nei due campi delle due
tabelle. A naso mi sembra che non sia sufficiente l'uso degli operatori
logici, ma che si debba usare un join.
L'SQL qui sotto mi riporta correttamente i 22 record della tabella A che
hanno una corrispondenza nei due campi della TabellaB, mi servirebbe poter
dire: fammi vedere gli altri!!!
SELECT TblOrdini.Lotto
FROM TblRigheDDT INNER JOIN (TblRArticoliFase INNER JOIN TblOrdini ON
TblRArticoliFase.CodBB = TblOrdini.CodBB) ON (TblRigheDDT.Lotto =
TblOrdini.Lotto) AND (TblRigheDDT.CodBB = TblRArticoliFase.CodBB) AND
(TblRigheDDT.Fase = TblRArticoliFase.Fase);
Grazie
Gianluigi Agostini

 logici, ma che si debba usare un join.
CUT
Ora ho capito cosa intendi dire. Ci sono diverse strade, la piu' semplice mi
sembra questa:
SELECT Query.Lotto, Query.CodBB, Query.Finito, Query.Fase
FROM Query
WHERE (((Query.Lotto & Query.fase) Not In (SELECT TblRigheDDT.Lotto &
TblRigheDDT.fase as Espress1 From TblRigheDDT)))
Fammi sapere se funziona.
Sib

 Sib
Se funziona??? FUNZIONA!!!!
Grazieeeeeeeeeeee....
Gianluigi Agostini