Newsgroup: it.comp.lang.visual-basic
Titolo: Query nidificate in SQL

Forse non sono riuscito a spiegarmi bene con l'altro post quindi ripresento
il mio problema con un po' più di spiegazioni.
Ho un DB con una notevole mole di dati su cui devo fare statistiche molto
complesse
ho quindi creato una serie di query semplici che unite danno il risultato
voluto.
Per non annoiarvi con i miei dati ho ricreato un caso semplificato (anche
per fare un
ulteriore test personale) in cui ho una sola tabella con dei dati e alcune
query che
prendono i dati e li elaborano (semplificando qui raddoppiano il valore e
nessuna ha
delle condizioni di filtraggio)
Il risultato finale (la query 'Totale') è quella che fornisce il risultato e
io
vorrei esplicitare tutte le query contenute:
al 1° passaggio esplicito la query 'Doppio'
al 2° passaggio esplicito la query 'DoppioAB'
al 3° passaggio esplicito la query 'DoppioA'
al 4° passaggio esplicito la query 'DoppioB'
Questo perchè le query 'Doppio', 'DoppioA' e 'DopppioB' accedono
direttamente alla tabella contente i dati e dovrei aggiungere dei filtri
Il problema sorge al 3° passaggio in quanto quando eseguo la query viene
fuori
l'errore: 'Errore di sintassi nella proposizione FROM'
So che potrei prendere tutti i risultati intermedi delle query e salvarli su
tabelle temporanee
ma ho dei problemi di accesso al DB (a volte in sola lettura), ho un sacco
di utenti, un sacco
di dati, un sacco di tabelle, e dovrei avere anche buone prestazioni....
Ecco tutti i dati: grazie a chiunque possa darmi una risposta!
Tabella: Tabella1
-----------
 ID  A  B
-----------
 1     2    3
 2     1    2
 3     0    1
 4    -1   0
 5    -2  -1
-----------
Query: 'Doppio'
-------------------------------------------------
SELECT Tabella1.ID,
 Tabella1.A*2 AS A2,
 Tabella1.B*2 AS B2
FROM Tabella1;
Query: 'DoppioA'
-------------------------------------------------
SELECT Tabella1.ID,
 Tabella1.A*2 AS A2
FROM Tabella1;
Query: 'DoppioB'
-------------------------------------------------
SELECT Tabella1.ID,
 Tabella1.B*2 AS B2
FROM Tabella1;
Query: 'DoppioAB'
-------------------------------------------------
SELECT  DoppioA.ID,
 DoppioA.A2,
 DoppioB.B2
FROM  DoppioA
 INNER JOIN
 DoppioB
 ON DoppioA.ID=DoppioB.ID;
Query: 'Totale'
-------------------------------------------------
SELECT  Doppio.ID,
 Doppio.A2+DoppioAB.A2 AS A4,
 Doppio.B2+DoppioAB.B2 AS B4
FROM  Doppio
 INNER JOIN
 DoppioAB
 ON Doppio.ID=DoppioAB.ID
'Esplicitazione delle query contenute nella query 'Totale'
------------------------------------------------------------------
SELECT  Doppio.ID,
 Doppio.A2+DoppioAB.A2 AS A4,
 Doppio.B2+DoppioAB.B2 AS B4
FROM  Doppio
 INNER JOIN
 AS DoppioAB
 ON Doppio.ID=DoppioAB.ID
------------------------------------------------------------------1°
SELECT  Doppio.ID,
 Doppio.A2+DoppioAB.A2 AS A4,
 Doppio.B2+DoppioAB.B2 AS B4
FROM  [ SELECT  Tabella1.ID,
   Tabella1.A*2 AS A2,
   Tabella1.B*2 AS B2
  FROM Tabella1
 ]. AS Doppio
 INNER JOIN
 DoppioAB
 ON Doppio.ID=DoppioAB.ID
------------------------------------------------------------------2°
SELECT  Doppio.ID,
 Doppio.A2+DoppioAB.A2 AS A4,
 Doppio.B2+DoppioAB.B2 AS B4
FROM  [ SELECT  Tabella1.ID,
   Tabella1.A*2 AS A2,
   Tabella1.B*2 AS B2
  FROM Tabella1
 ]. AS Doppio
 INNER JOIN
 [ SELECT  DoppioA.ID,
   DoppioA.A2,
   DoppioB.B2
  FROM  DoppioA
   INNER JOIN
   DoppioB
   ON DoppioA.ID = DoppioB.ID
 ]. AS DoppioAB
 ON Doppio.ID=DoppioAB.ID
------------------------------------------------------------------3°
SELECT  Doppio.ID,
 Doppio.A2+DoppioAB.A2 AS A4,
 Doppio.B2+DoppioAB.B2 AS B4
FROM  [ SELECT  Tabella1.ID,
   Tabella1.A*2 AS A2,
   Tabella1.B*2 AS B2
  FROM Tabella1
 ]. AS Doppio
 INNER JOIN
 [ SELECT  DoppioA.ID,
   DoppioA.A2,
   DoppioB.B2
  FROM  [ SELECT  Tabella1.ID,
     Tabella1.A*2 AS A2
    FROM Tabella1
   ]. AS DoppioA
   INNER JOIN
   AS DoppioB
   ON DoppioA.ID = DoppioB.ID
 ]. AS DoppioAB
 ON Doppio.ID=DoppioAB.ID
------------------------------------------------------------------4°
SELECT  Doppio.ID,
 Doppio.A2+DoppioAB.A2 AS A4,
 Doppio.B2+DoppioAB.B2 AS B4
FROM  [ SELECT  Tabella1.ID,
   Tabella1.A*2 AS A2,
   Tabella1.B*2 AS B2
  FROM Tabella1
 ]. AS Doppio
 INNER JOIN
 [ SELECT  DoppioA.ID,
   DoppioA.A2,
   DoppioB.B2
  FROM  [ SELECT  Tabella1.ID,
     Tabella1.A*2 AS A2
    FROM Tabella1
   ]. AS DoppioA
   INNER JOIN
   [ SELECT  Tabella1.ID,
     Tabella1.B*2 AS B2
    FROM Tabella1
   ]. AS DoppioB
   ON DoppioA.ID = DoppioB.ID
 ]. AS DoppioAB
 ON Doppio.ID=DoppioAB.ID

 ha scritto nel messaggio
news:xzN3b.18619$d66.4...@news2.tin.it...



A me con Access non funziona. Se metto le tonde mi da errore sul From,
altrimenti con le quadre mi dice che non sono parentesi valide... :-(((
Saluti, Il Sora!!

 altrimenti con le quadre mi dice che non sono parentesi valide... :-(((
I soliti "automatismi" di access...
Ricordo una query scritta a manina dal sottoscritto che esguita dalla
finestra interattiva funzionava perfettamente.
Bastava salvare e andare in modifica che... miracolo (demoniaco,
direi...)... access modificava le parentesi e segnalava un bell'errore di
sintassi...
no comment.
ciao
ugo