Newsgroup: it.comp.software.database
Titolo: Query su più tabelle

Buongiorno a tutti,
mi rendo conto che la domanda è stupida, ma cercando un po' in giro (google
e news) non ho trovato una risposta che facesse al caso mio. Sono piuttosto
inesperto di DB e mi sono trovato con il seguente problema:
ho N tabelle che si chiamano ClasseA, ClasseB..., ClasseN la cui struttura è
sempre la stessa; hanno un campo ID (contatore, chiave primaria) ed un campo
descrizione (campo di testo). Ho necessità di avere un Recordset (lavoro in
ASP su questo DB) con TUTTI i record delle tabelle ClasseA, ClasseB...,
ClasseN ordinati per descrizione.
Ringrazio anticipatamente chi mi sarà di aiuto.
Ciao

 ha scritto nel messaggio
news:TfRBc.361394$hc5.15...@news3.tin.it...

Con la UNION?
Tipo:
(SELECT * FROM ClasseA UNION SELECT * FROM ClasseB ... UNION SELECT * FROM
ClasseN) ORDER BY descrizione;
le parentesi servono a ordinare il totale della UNION.
Facci sapere

 le parentesi servono a ordinare il totale della UNION.
Funziona alla perfezione, l'unico problema ce l'ho nell'ordinamento: il mio
recordset č creato cosě:
testRS.Open "Select * From A UNION select * From B", Conn,3,3
se provo a fare questo:
testRS.Open "(Select * From A UNION select * From B) order by descrizione",
Conn,3,3
ottengo questo messaggio di errore: "Errore di sintassi nella query di
unione."
Per adesso ho ovviato cosě:
testRS.Open "Select descrizione From A UNION select descrizione From B",
Conn,3,3
dal momento che il campo descrizione č l'unico che mi interessa, ma non mi
dispiacerebbe avere a disposizione tutti i campi della tabelle per un maggio
controllo. Se sai darmi ancora una mano :)
Sei stato preziosissimo e velocissimo, grazie ancora!
Ciao

unione."
[CUT]
Ciao,
devi assegnare una tabella derivata, prova cosě
-------------
testRS.Open "Select * From (Select * From A UNION Select * From B) AS
TbUnite Order by descrizione",
Conn,3,3
-------------
Ciao Giorgio


E se provi a fare "SELECT id, descrizione FROM ClasseA UNION SELECT id,
descrizione FROM ClasseB.... " ecc, che succede?
Non posso replicare la stessa situazione sul mio Sql, perché per ragioni
aziendali ho la v. 3.2x, sennò proverei io!
Ciao

 devi assegnare una tabella derivata, prova così
Ciao Giorgio,
I BOL riportano:
"The ORDER BY clause can include items not appearing in the select list.
However, if SELECT DISTINCT is specified, or if the SELECT statement
contains a UNION operator, the sort columns must appear in the select list".
Questa regola è valida anche in Access.
Quindi, se si intende ordinare per Descrizione, questa colonna deve apparire
almeno nella prima SELECT.
E' sempre sconsigliabile utilizzare l'* dato che la maggior parte delle
volte non serve recuperare tutte le righe di una colonna.
Inoltre l'operatiore UNION elimina eventuali righe duplicate. Se si intende
recuperare tutte le righe presenti nelle tabelle ClasseA...ClasseN occorre
utilizzare la clausola ALL:
SELECT ClasseID, Descrizione
FROM ClasseA
UNION ALL
SELECT ClasseID, Descrizione
FROM ClasseB
...
UNION ALL
SELECT ClasseID, Descrizione
FROM ClasseN
ORDER BY Descrizione;
Ciao!
-- 
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://mvp.support.microsoft.com
http://italy.mvps.org

 delle volte non serve recuperare tutte le righe di una colonna.
Ehm... volevo dire tutte le colonne di una tabella ;-)


 Questa regola č valida anche in Access.
[CUT]
sě, lo so, mi sono lasciato trasportare dalla risposta di Mauro.
:-)
in ogni caso Grazie
Ciao Giorgio

già che siamo in tema.
un database strutturato in questa maniera è + efficiente di uno strutturato
su una tabella sola?
c'ho ancora dubbi...

 c'ho ancora dubbi...
Anch'io ;-)
Ciao!
