PDA

View Full Version : [SQL] Problema estrazione dati da due tabelle


UnknownSoldier
21-12-2008, 13:47
Salve. Vi spiego subito il mio problema:

Ho una tabella che si chiama Courses_Registered (che rappresenta le iscrizioni di N utenti a M corsi):

Courses_Registered (ID_Courses di tipo INT, barcode_Registered di tipo VARCHAR)

Poi ho la tabella Registered che contiene una lista di persone:

Registered (barcode, lastName, firstName tutti di tipo VARCHAR)

Ho la necessità di recuperare la lista delle persone iscritte ad un determinato corso, quindi i miei riferimenti sono 2: il barcode per le persone e ID_Courses per i corsi.

Mettiamo caso che volessi recuperare la lista delle persone iscritte al corso che ha come ID_Courses il valore 7.

Ho provato a fare:

SELECT * FROM Registered WHERE barcode = (SELECT barcode_Registered FROM Courses_Registered WHERE ID_Courses = 7) ORDER BY lastName

Ma mi restituisce solamente un record... perchè? Forse dovrei usare una INNER JOIN? Ma non ho mai capito come usarla...

Hactor
21-12-2008, 13:55
Forse dovrei usare una INNER JOIN? Ma non ho mai capito come usarla...

Sì dovresti usare un INNER JOIN perché in quel modo peschi solamente il PRIMO risultato con id == 7 e poi lo riutilizzi nella seconda tabella.

gugoXX
21-12-2008, 14:11
Salve. Vi spiego subito il mio problema:

Ho una tabella che si chiama Courses_Registered (che rappresenta le iscrizioni di N utenti a M corsi):

Courses_Registered (ID_Courses di tipo INT, barcode_Registered di tipo VARCHAR)

Poi ho la tabella Registered che contiene una lista di persone:

Registered (barcode, lastName, firstName tutti di tipo VARCHAR)

Ho la necessità di recuperare la lista delle persone iscritte ad un determinato corso, quindi i miei riferimenti sono 2: il barcode per le persone e ID_Courses per i corsi.

Mettiamo caso che volessi recuperare la lista delle persone iscritte al corso che ha come ID_Courses il valore 7.

Ho provato a fare:

SELECT * FROM Registered WHERE barcode = (SELECT barcode_Registered FROM Courses_Registered WHERE ID_Courses = 7) ORDER BY lastName

Ma mi restituisce solamente un record... perchè? Forse dovrei usare una INNER JOIN? Ma non ho mai capito come usarla...

Scommetto che stai usando MySql, e scommetto che hai trovato un altro dei casi in cui MySql non si comporta come motore SQL Standard.
Nel caso in cui,associato ad ogni bar-code tu avessi piu' di un utente (come mi sembra di avere capito sia il tuo caso), la tua query avrebbe dovuto restituire errore, e cosi' (magari) avresti capito cosa e dove aggiustare.

Prova con IN al posto di =

SELECT * FROM Registered WHERE barcode IN (SELECT barcode_Registered FROM Courses_Registered WHERE ID_Courses = 7) ORDER BY lastName

UnknownSoldier
21-12-2008, 14:16
Grazie mille funziona! Comunque sto usando SQLite ;)