Newsgroup: it.comp.appl.access
Titolo: creare una sola query

La mia query di MSAccess è:
SELECT ArticoliMagazzino1.CodiceArticolo,
ArticoliMagazzino1.DescrizioneArticolo,
ArticoliMagazzino1.UmDiMagazzino, Query2.Prezzo
FROM ArticoliMagazzino1 LEFT JOIN Query2 ON
ArticoliMagazzino1.CodiceArticolo=Query2.CodiceArticolo
WHERE (((ArticoliMagazzino1.StatoRecord)=0));
Dove Query2 è:
SELECT TabellaListiniArt.CodiceArticolo, TabellaListiniArt.Prezzo
FROM TabellaListiniArt
WHERE (((TabellaListiniArt.CodiceListino)="1") AND
((TabellaListiniArt.Stato)=0));
Devo creare una singola query da usare in VB.
Grazie a tutti.

 ha scritto nel messaggio
news:1141681233.1...@v46g2000cwv.googlegroups.com...
La mia query di MSAccess č:
SELECT ArticoliMagazzino1.CodiceArticolo,
ArticoliMagazzino1.DescrizioneArticolo,
ArticoliMagazzino1.UmDiMagazzino, Query2.Prezzo
FROM ArticoliMagazzino1 LEFT JOIN Query2 ON
ArticoliMagazzino1.CodiceArticolo=Query2.CodiceArticolo
WHERE (((ArticoliMagazzino1.StatoRecord)=0));
Dove Query2 č:
SELECT TabellaListiniArt.CodiceArticolo, TabellaListiniArt.Prezzo
FROM TabellaListiniArt
WHERE (((TabellaListiniArt.CodiceListino)="1") AND
((TabellaListiniArt.Stato)=0));
Devo creare una singola query da usare in VB.
Grazie a tutti.
Ciao giminera,
premesso che puoi usarla in VB anche cosě con le 2 query, comunque per avere
una sola select devi riscriverla cosě:
SELECT ArticoliMagazzino1.CodiceArticolo,
ArticoliMagazzino1.DescrizioneArticolo,
ArticoliMagazzino1.UmDiMagazzino, TabellaListiniArt.Prezzo
FROM ArticoliMagazzino1 LEFT JOIN TabellaListiniArt ON
ArticoliMagazzino1.CodiceArticolo=TabellaListiniArt.CodiceArticolo
WHERE (((ArticoliMagazzino1.StatoRecord)=0) AND
((TabellaListiniArt.CodiceListino)="1") AND
((TabellaListiniArt.Stato)=0) )
-- 
Cinzia
---------------------------------------
|  
http://www.riolab.org
  |
---------------------------------------

 ha scritto nel messaggio
news:1141681233.1...@v46g2000cwv.googlegroups.com...




Ciao giminera,
puoi sistituire la parola Query2 con l'Sql effettivo della Query2 per poi
ridargli il suo nome con l'alias.
Le lascio un po' spaziate così si capisce meglio
----
SELECT ArticoliMagazzino1.CodiceArticolo,
ArticoliMagazzino1.DescrizioneArticolo,
ArticoliMagazzino1.UmDiMagazzino, Query2.Prezzo
FROM ArticoliMagazzino1 LEFT JOIN
(SELECT TabellaListiniArt.CodiceArticolo, TabellaListiniArt.Prezzo
FROM TabellaListiniArt
WHERE TabellaListiniArt.CodiceListino="1" AND
TabellaListiniArt.Stato=0) AS Query2 ON
ArticoliMagazzino1.CodiceArticolo=Query2.CodiceArticolo
WHERE ArticoliMagazzino1.StatoRecord=0
----
Ciao
-- 
Giorgio Rancati
[Office Access MVP]

 ((TabellaListiniArt.Stato)=0) )
Ciao Cinzia,
Scusa se mi permetto ma così il risultato cambia totalmente, la Left Join
viene trasformata in una Inner Join.
La presenza di un qualsiasi campo della tabella TabellaListiniArt nella
clausola Where impedisce di avere il risultato di quel campo a NULL quindi
niente Left Join.
fai questa piccola prova (la scrivo in linguaggio Sql per comodità)
----
Create Table Tab1
(Id1 int, F1 int)
Create Table Tab2
(Id2 int, F2 int)
Insert Tab1 Values(1,1)
Insert Tab1 Values(2,2)
Insert Tab1 Values(3,3)
Insert Tab2 Values(1,1)
Insert Tab2 Values(2,1)
Insert Tab2 Values(3,2)
--Prima Query
Select Tab1.*,Tab2.*
From Tab1
   Left Join
     Tab2 ON Tab1.Id1=Tab2.Id2
Where Tab2.F2=2
--Seconda Query
Select Tab1.*,T2.*
From Tab1
   Left Join
     (Select * From Tab2 Where F2=2) AS T2
      ON Tab1.Id1=T2.Id2
Drop Table Tab1,Tab2
----
la prima query rende un solo record, la seconda rende tre record, tanti
quanti ce ne sono nella tabella Tab1.
:-)



Ciao Giorgio,
giustissimo questa cosa mi "frega " sempre per ricapitolare e fissarlo in
memoria  nel primo caso il filtro viene applicato al risultato della left
Join  x cui la left join restituisce 3 record ma la condizione where filtra
il risultato ad un solo record.
Nel secondo caso viene prima eseguita la seconda select che restiutisce 1
record e dopo viene eseguita la Left Join che a questo punto restituisce 3
record.
Ciao e grazie!
