Newsgroup: it.comp.lang.visual-basic
Titolo: Select in multitabella?!?

Ciao a tutti, avrei bisogno di fare una select su più tabelle
conteporaneamente.
Nel senso che ho n tabelle del tipo tabella_aammgg (data) tutte con lo
stesso tracciato ed io dovrei cercare un campoA='XXXXXX' su tutte le
tabelle, e possibile in qualche modo elegante?
ad esempio
Tabella_061029
CampoA CampoB
'aaaaaa'  12
'cccccc'  13
Tabella_061030
CampoA CampoB
'ssssss'   43
'pppppp'   42
'XXXXXX'   12
Facendo la ricerca (o lanciando una funzione) vorrei ottenere il nome
della tabella (Tabella_061030) e i valori dei campi di quel record.


Dipende da che tipo di DBMS usi.
Inoltre non è facile ottenere il nome della tabella, bisogna ricorrere ad un
trucco.
Ad esempio, per MS Access o SQLSrv:
SELECT CampoA, CampoB, 'Tabella_061029' AS NomeTabella FROM Tabella_061029
UNION ALL
SELECT CampoA, CampoB, 'Tabella_061030' AS NomeTabella FROM Tabella_061030
UNION ALL
...
WHERE CampoA='XXXXXX'
-- 
Bye
Raf
-----------------------------------------------------
Funk: cooler than the other side of the pillow.

Manuel73 ha scritto:

Non è possibile che sia stato commesso un'errore di Normalizzazione
del DB...?
La prima cosa che mi viene da pensare è che se invece di avere una
Tabella al Giorno
avessi avuto una Tabella con un campo Supplementare di tipo Data non
avresti avuto il problema di complicarti la vita con delle UNION
Select....
Ovviamente sono considerazioni pretenzione, nel senso che non avendo
idea del progetto ho semplicemente fatto un'ipotesi
@Alex

Grazie per le risposte, l'errore di normalizzazione è evidente (ma in
parte anche voluto), praticamente ogni tabella è una lavorazione
giornaliera, esistono 7 tipi di lavorazione per ogni giorno. In pratica
il problema si risolve con la storicizzazione che copierà le varie
tabella in una tabella storico facendo anche i controlli del caso; il
problema è che siamo indietro con la fase di storicizzazione e quindi
devo fare uno strumento per fare le ricerche.
Al momento ho risolto molto poco elegantemente:
Set rstSchema = cn.OpenSchema(adSchemaTables)
Do Until rstSchema.EOF
   AppStr = rstSchema!TABLE_NAME
   For i = 1 To Num_Lavorazioni
       If Left(AppStr, Len(Lavorazioni(i))) = Lavorazioni(i) Then
          If Right(AppStr, 5) >= Data1 And Right(AppStr, 5) <= Data2
Then
             rsTmp.Open "SELECT * FROM " & Trim(AppStr) & " WHERE
serial = '" & txtAss & "'", _
                         cn, adOpenStatic, adLockReadOnly, adCmdText
             If rsTmp.RecordCount > 0 Then
                rsTmp.MoveFirst
                While Not rsTmp.EOF
                      linea = AppStr & String(30 - Len(AppStr), " ") _
                            & "+" & rsTmp!Serial & " : " & rsTmp!ABI &
" : " & rsTmp!CAB & _
                            "# " & rsTmp!IMG_DIR & "# " &
rsTmp!IMG_NAME & "# " & rsTmp!IMG_EXT & " @" & Str(rsTmp!Blip)
                      List1.AddItem linea
                      rsTmp.MoveNext
                Wend
             End If
             rsTmp.Close
          End If
          Exit For
       End If
   Next i
   rstSchema.MoveNext
Loop
rstSchema.Close
Dove lavorazioni è un vettore di stringhe che contiene tutte le
lavorazioni e txtAss e una textbox che contiene il valore da ricercare
nel campo 'serial'. A questo punto se potessi indicizzare la ricerca su
rstSchema con un indice o qualcosa del genere andrei a vedere solo le
lavorazioni che mi interessanno per le date interessate, senza dovermi
passare tutte le tabelle; ma openshema lo conosco poco e così
funziona...