PDA

Visualizza versione completa : Aiutatemi a fare una Inner join...


mangzeus
14-07-2004, 14.51.23
devo fare una inner join tra due tabelle e non riesco a ricavarmi l'istruzione sql....

Allora io ho due tabelle

1 tabellaLibri con i seguenti campi:

ID, TItolo, Autore, CodiceLibro, PosizioneLibro

2 tabellaMovimenti

Nome, Cognome, Titolo Libro, IdLibro(collegato all'ID della tabella LIbri)


io voglio fare una inner join tra queste due tabelle...

e quando mi popolo il datagrid voglio che mi escano tutti i campi della tabellaMovimenti più il campo [Autore], [CodiceLibro], [PosizioneLibro], della tabella movimenti dove idLibro è uguale a ID (della tabellaLibri)


quale risulta la select???

dave4mame
14-07-2004, 14.59.23
create table prottola as select

a.nome,
a.cognome,
....
b.autore,
b.codice libro
from tabellalibri as a, tabella movimenti as b
where a.id=b.id


con beneficio di inventario; l'sql che uso io è un dialetto un pò sporco.

forse la sintassi ortodossa è:

a.nome,
a.cognome,
....
b.autore,
b.codice libro
from tabellalibri as a inner join tabellamovimenti as b
one a.id=b.id

Dav82
14-07-2004, 15.06.14
Una annotazione, per partire: il titolo del libro lo metterei solo nella TabellaLibri, non in TabellaMovimenti, altrimenti è una ripetizione ;)
E poi, sempre che tu non l'abbia fatto per altri motivi, userei un solo ID in TabelaLibri: puoi benissimo usarlo come chiave esterna in TabellaMovimenti, ed ogni libro ha un suo ID univoco.

Detto questo, e quindi togliendo il titolo dai movimenti, la select da fare è questa:


SELECT Nome, Cognome, Titolo, CodiceLibro, PosizioneLibro
FROM TabellaLibri join TabellaMovimenti
ON TabellaLibri.ID = TabellaMovimenti.IdLibro


Il join fa normalmente l'inner join in tutti i sistemi più diffusi ;)

mangzeus
14-07-2004, 15.50.05
Originariamente inviato da Dav82
Una annotazione, per partire: il titolo del libro lo metterei solo nella TabellaLibri, non in TabellaMovimenti, altrimenti è una ripetizione ;)
E poi, sempre che tu non l'abbia fatto per altri motivi, userei un solo ID in TabelaLibri: puoi benissimo usarlo come chiave esterna in TabellaMovimenti, ed ogni libro ha un suo ID univoco.

Detto questo, e quindi togliendo il titolo dai movimenti, la select da fare è questa:


SELECT Nome, Cognome, Titolo, CodiceLibro, PosizioneLibro
FROM TabellaLibri join TabellaMovimenti
ON TabellaLibri.ID = TabellaMovimenti.IdLibro


Il join fa normalmente l'inner join in tutti i sistemi più diffusi ;)


adesso ti spiego...io ho un programma nel quale faccio select su tabelle access...finchè sono tabelle sempici, senza inner join posso fare una cosa di questo tipo e impostare il comando delete, insert, update per la tabella automaticamente così..

Dim CmbBld As New OleDb.OleDbCommandBuilder(da)
'era per queste due istruzioni che non funzionava...access le richiede



CmbBld.QuotePrefix = "["
CmbBld.QuoteSuffix = "]"


da.DeleteCommand = CmbBld.GetDeleteCommand
da.InsertCommand = CmbBld.GetInsertCommand
da.UpdateCommand = CmbBld.GetUpdateCommand

però questo tipo di espressione non supporta le istruzioni sql con la inner join...e mi da un errrore quando cerco di modificare la tabella, dicendomi che gli serve un commandUpdate valido...

come faccio ad impostarlo???

mangzeus
14-07-2004, 15.51.04
la select con la inner join è questa:


Select TabellaMovimenti.ID, TabellaMovimenti.Cognome, TabellaMovimenti.Nome, TabellaMovimenti.Titolo, TabellaMovimenti.[Data Consegna], TabellaMovimenti.[Data Restituzione], TabellaMovimenti.IdLibro, TabellaMovimenti.Prestito, TabellaLibri.[Autore/Autrice], TabellaLibri.[Codice Libro], TabellaLibri.Posizione From TabellaLibri inner join TabellaMovimenti on TabellaLibri.ID=TabellaMovimenti.IdLibro

dave4mame
14-07-2004, 17.26.36
beh, scusa, se lo fai su tabelle access, puoi "comporre" la query con l'editor "grafico" e poi visualizzare il codice sottostante...

Topov
14-07-2004, 21.09.14
Che cosa è un innerjoin?

LoryOne
15-07-2004, 11.17.37
E' una parolaccia.
non voglio assolutamente che tu la dica, intesi ? Altrimenti niente gelato ! :D

Dav82
15-07-2004, 11.22.06
Originariamente inviato da LoryOne
E' una parolaccia.
non voglio assolutamente che tu la dica, intesi ? Altrimenti niente gelato ! :D

Lory, mi fai scompiscià! :D