Newsgroup: it.comp.appl.access
Titolo: Unione di due tabelle

Sale a tutta la ML,
sto cercando di raggruppare per alcuni campi dopo avere fatto una
UNION tra due tabelle, ma non funziona, come mai? cosa sbaglio?
SELECT Campo1, sum(Campo2) AS tot_imp, Campo3
FROM (
(Select TAB1.Campo1, TAB1.Campo2, TAB1.Campo3
From TAB1
Where TAB1.Campo3 = 1) 
UNION 
(Select TAB2.Campo1, TAB2.Campo2, TAB2.Campo3
From TAB2
Where TAB2.Campo3 = 1) )
GROUP BY Campo1, Campo3
grazie a tutti. Alberto

Alberto C. ha scritto:

la query di union (esclusa quindi quella di raggruppamento) da sola 
funziona ?
Apparentemente sembra scritta bene
Forse gli da fastidio effettuare il raggruppamento

 GROUP BY Campo1, Campo3
Non mi pare che Access supporti la sintassi SELECT ... FROM (SELECT...).
Non Access97 comunque: forse le versioni successive...
HTH.
Alessandro

 ha scritto nel messaggio 
news:rcu7e.1233958$35.45...@news4.tin.it...


 ha scritto nel messaggio 
news:d3luea$92o$1...@newsread.albacom.net...


 Non Access97 comunque: forse le versioni successive...
Forse le versioni successive alla 2003, cioè
quelle di là da venire.
Bruno

 supporta?
Pare che sia proprio cosě (vedi la risposta di Bruno). Perň se crei una
query con la sola UNION e fai il raggruppamento su quella non dovresti avere
problemi (spero).
HTH.
Alessandro

...

Premesso che Access '97 supporta le subquery ("SELECT FROM [SELECT ]
AS"), ricorda sempre che la clausola "UNION" ha bisogno di compagnia
... non puoi lasciarla sola soletta cosě com'č altrimenti s'incavola
:)
La query corretta č "SELECT TabExt1.Campo1, Sum(TabExt1.Campo2) AS
SommaDiCampo2, TabExt1.Campo3 FROM [SELECT Campo1, Campo2, Campo3 FROM
TAB1 WHERE (Campo3=1) UNION SELECT Campo1, Campo2, Campo3 FROM TAB2
WHERE (Campo3=1)]. AS TabExt1 GROUP BY TabExt1.Campo1,
TabExt1.Campo3;"
Dato che potrebbe essere complicato leggerla, la riporto qua sotto
spezzata nelle 3 righe fondamentali (NB: non puoi spezzare la seconda
*arbitrariamente*):
1) SELECT TabExt1.Campo1, Sum(TabExt1.Campo2) AS SommaDiCampo2,
TabExt1.Campo3
2)FROM [SELECT Campo1, Campo2, Campo3 FROM TAB1 WHERE (Campo3=1) UNION
SELECT Campo1, Campo2, Campo3 FROM TAB2 WHERE (Campo3=1)]. AS TabExt1
3)GROUP BY TabExt1.Campo1, TabExt1.Campo3;
Buon lavoro
Roberto

 AS")
Interessante. Per scrupolo ho provato la seguente query:
SELECT * FROM (SELECT * FROM Tabella1);
e mi dà errore. Puoi dirmi dove sbaglio?
Alessandro

...

Così, invece, funziona.
SELECT * FROM [SELECT * FROM Tabella1]. AS AliasDiTabella1;
Cosa noti di uguale con l'altro esempio? ;)
E la cosa, che è già *molto* interessante, lo diventa anche
di più quando scopri che:
- le subquery possono essere nidificate,
- che puoi usare anche () invece di []. e fai attenzione al
  punto che sta dopo la quadra chiusa, che non è per vezzo,
- che c'è un bug strisciante che, entrando in "mostra sql",
  toglie il . finale e, quando vuoi tornare in "struttura",
  ti dice che c'è un "errore nella proposizione FROM".
Roberto


Ok, grazie (non si finisce mai di imparare). Ma nell'help c'è questa cosa?
Non riesco a trovarla...
Non sono riuscito ad usare le parentesi tonde, ma non è un gran problema in
fondo.
Il "bug strisciante" implica che non puoi fare molto affidamento su query
con questa sintassi oppure funzionano normalmente e hai problemi solo se
torni in modifica del codice SQL?
Alessandro

 torni in modifica del codice SQL?
No, funzionano perfettamente, ma dovendo intervenire a mano
sul codice SQL quando vuoi ritornare in "struttura" ti vien
fuori l'errore che dicevo: a volte succede che la tua query
(che funziona perfettamente) la apri in "struttura" e, poi,
vai in "SQL" ... e scopri che (chissà come mai!) quel punto
che stava dopo la "]" è sparito ... allora tu vai lì, ce lo
rimetti, clicchi su "struttura" tutto ritorna a funzionare!
Roberto

 PnCage.CAGECDXH) AS SoloCage;
Che posso dirti? Io ho provato:
SELECT * FROM (SELECT * FROM Tabella1) AS AliasDiTabella1;
e
SELECT * FROM (SELECT * FROM Tabella1). AS AliasDiTabella1;
Ed entrambe mi danno lo stesso errore (syntax error in FROM clause). Ci
dev'essere qualcosa che ancora mi sfugge...
Comunque grazie ancora per il tuo tempo.
Alessandro

 dev'essere qualcosa che ancora mi sfugge...
Forse che hai usato "()" anziché "[]"?
Rileggi il thread ;) *con attenzione* ;)
Roberto

 Rileggi il thread ;) *con attenzione* ;)
A me sembra di essere stato attento, tu che dici? ;)
Il tuo esempio inizia proprio con "SELECT * FROM (" - notare la parentesi
tonda: mi stai dicendo che se prendi quello che c'è tra parentesi tonde e lo
sostituisci con il nome di una query che fa la stessa identica cosa il tuo
esempio smette di funzionare? Non mi sembra che abbia molto senso...
Alessandro