MySql LEFT JOIN o unione tabelle

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