Salve,
per favore c’ qualcuno che possa indicarmi come posso fare per ottenere dei valori da due tabelle strutturalmente diverse di un database, in questo modo ottengo solo una colonna dei dati:
sql = "SELECT * FROM Risorse "
sql = sql + "LEFT JOIN Fornitori ON Risorse.Codice = Fornitori.Codice "
Tab. Risorse:
Codice Descrizione Fornitore Prezzo
1 Magic Mouse Apple 89
3 Magic keyboard Apple 149
Tab. Fornitori:
Codice Categoria Descrizione Fornitore UNM Prezzo
1 Cat-1 Magic Mouse Apple N. 89
2 Cat-2 Mouse Trust N. 30
3 Cat-1 Magic keyboard Apple N. 149
5 Cat-3 Processor. Intel N. 300
Se ho capito bene e vuoi unire l’output delle due tabelle puoi fare una UNION
SELECT Codice, "", Descrizione, Fornitore, "", Prezzo
FROM Risorse
UNION
SELECT Codice, Categoria, Descrizione, Fornitore, UNM, Prezzo
FROM Fornitori
Se vuoi invece ottenere delle risorse le informazioni mancanti presenti nella tabella fornitori:
SELECT r.*, f.categoria, f.unm FROM Risorse r LEFT JOIN Fornitori f ON r.Codice = f.Codice
Gentilissimi, grazie per le pronte risposte!
Ho provato in questo modo:
'sql = "SELECT R.*, F.UNM, F.Prezzo FROM Risorse R "
'sql = sql + "LEFT JOIN Fornitori F "
'sql = sql + "ON R.Codice = F.Codice "
ma stranamente nell’output i valori della colonna prezzo della Tab Risorse vengono annullati
sia R (Risorse) che F (Prezzo) hanno il campo Prezzo se vuoi avere entrambi basta che rinomini la colonna d’uscita:
SELECT R.*, F.UNM, F.Prezzo as PrezzoF FROM Risorse R LEFT JOIN Fornitori F on R.Codice=F.Codice
[quote=382153:@Antonio Rinaldi]sia R (Risorse) che F (Prezzo) hanno il campo Prezzo se vuoi avere entrambi basta che rinomini la colonna d’uscita:
SELECT R.*, F.UNM, F.Prezzo as PrezzoF FROM Risorse R LEFT JOIN Fornitori F on R.Codice=F.Codice[/quote]
Antonio, ho provato come dici tu:
'sql = "SELECT R.*, F.UNM AS UNM2, F.Prezzo AS PrezzoF FROM Risorse R "
'sql = sql + "LEFT JOIN Fornitori F "
'sql = sql + "ON R.Codice = F.Codice "
successivamente aggiungo a un listbox in questo modo:
[quote]Dim data As RecordSet = App.DB.SQLSelect(sql)
If data <> Nil Then
While Not data.EOF
DataList.AddRow(data.Field(“Codice”).StringValue, _
data.Field(“Descrizione”).StringValue, _
data.Field(“UNM2”).StringValue, _
data.Field(“PrezzoF”).StringValue, _
data.Field(“Fornitore”).StringValue
data.MoveNext
Wend
data.Close
End If[/quote]
… ma il risultato non cambia, la colonna Prezzo e UNM dei valori della prima Tabella (Risorse) vengono annullati
Sei sicuro che a R.Codice corrisponde almeno un record di F.Codice (stesso tipo di dato e stesso valore)?
Nella query tu richiedi tutti i dati di R e vuoi legare i corrispettivi record di F (se esistono), per cui se non c’ nulla vuol dire che non stato identificato lo stesso codice.
[quote=382179:@Antonio Rinaldi]Sei sicuro che a R.Codice corrisponde almeno un record di F.Codice (stesso tipo di dato e stesso valore)?
Nella query tu richiedi tutti i dati di R e vuoi legare i corrispettivi record di F (se esistono), per cui se non c’è nulla vuol dire che non è stato identificato lo stesso codice.[/quote]
ottengo tutti i valori del campo (codice) e (descrizioni) nell’output, mentre per quanto riguarda il campo (unm) e (prezzo) non ottengo i valori che sono presenti nella tabella R, ma solo quelli presente nella tabella F
ho verificato prima così:
sql = "SELECT R.* FROM Risorse R "
e successivamente:
sql = "SELECT F.* FROM Fornitori F "
in alcuni record non è presente lo stesso (Codice) delle due tabelle… esiste una procedura per ottenere indistintamente tutti i record?
ovvero se in Tab. Risorse ho:
Codice Descrizione Fornitore Prezzo
1 Magic Mouse Apple 89
3 Magic keyboard Apple 149
Tab. Fornitori:
Codice Categoria Descrizione Fornitore UNM Prezzo
1 Cat-1 Magic Mouse Apple N. 89
2 Cat-2 Mouse Trust N. 30
3 Cat-1 Magic keyboard Apple N. 149
5 Cat-3 Processor. Intel N. 300
come posso ottenere:
Codice Descrizione Fornitore Prezzo
1 Magic Mouse Apple 89
3 Magic keyboard Apple 149
5 Cat-3 Processor. Intel 300
Allora il discorso diverso.
Se Fornitori ha tutti i codici che ti servono allora basta che inverti le tabelle (from Risorse R left join Fornitori F diventa from Fornitori F left join Risorse R)
Se vuoi unire tutti dati in un risultato unico devi eseguire la query come indicato da Massimo magari dando i nomi ai campi “”
In questo caso avrai codici doppi…
[quote=382199:@Antonio Rinaldi]Allora il discorso è diverso.
Se Fornitori ha tutti i codici che ti servono allora basta che inverti le tabelle (from Risorse R left join Fornitori F diventa from Fornitori F left join Risorse R)
Se vuoi unire tutti dati in un risultato unico devi eseguire la query come indicato da Massimo magari dando i nomi ai campi “”
In questo caso avrai codici doppi…[/quote]
la tabella Risorse è formata da più campi e contiene dei record “completi” e altri con sola Descrizione e Codice a cui manca solo il Prezzo, che è presente invece nella tabella Fornitori; per cui vorrei ricavare in qualche modo Prezzo da Fornitori con Codice e aggiungerlo a Risorse in cui sono già presenti Codice e Descrizione…
Grazie per i suggerimenti!
ricavo i valori con la seguente quei:
sql = "SELECT r.*, f.UNM AS um, f.Prezzo AS p "
sql = sql + "FROM Risorse r "
sql = sql + "LEFT JOIN Risorse_Fornitori f "
sql = sql + "USING (Codice)"
successivamente riesco a vedere i valori di tutte le colonne cos:
[code]Dim data As RecordSet = App.DB.SQLSelect(sql)
If data <> Nil Then
While Not data.EOF
b.AddRow
lb.Cell(lb.LastIndex, 0) = data.Field(“Codice”).StringValue
lb.Cell(lb.LastIndex, 1) = data.Field(“Descrizione”).StringValue
lb.Cell(lb.LastIndex, 2) = data.Field("um").StringValue
If lb.Cell(lb.LastIndex, 2) = "" Then
lb.Cell(lb.LastIndex, 2) = data.Field("UNM").StringValue
End If
lb.Cell(lb.LastIndex, 3) =data.Field("p").StringValue
If lb.Cell(lb.LastIndex, 3) = "" Then
lb.Cell(lb.LastIndex, 3) = data.Field("Prezzo").StringValue
End If
lb.Cell(lb.LastIndex, 4) = data.Field("Fornitore").StringValue
data.MoveNext
Wend
data.Close
End If[/code]
ulteriori suggerimenti per migliorare il codice sono molto graditi!
grazie per l’attenzione