|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Bannato
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2682
|
[SQL urgente] Problema a realizzare queste 2 query...aiuto esame dopodomani
Sono un po' disperato perchè ho ancora qualche problema di query e tra due giorni ho l'esame di database
![]() Vi prego di chiarirmi qualche dubbio. Ho le seguenti tabelle: PORTAEREI(nome_portaerei, anno_varo, numero_marinai) AEREO(codice, anno_produzione, nome_portaerei) PILOTA(matricola, nome, ore_di_volo, codice_aereo_pilotato) ATTERRAGGIO(ID_atterragio, nome_portaerei, codice_aereo, data) Allora le chiavi sono in grassetto, i vincoli di inegrità referenziale credo siano chiari dai nomi cmq AEREO è collegato a PORTAEREI mediante: nome_portaerei. PILOTA è collegato ad AEREO tramite il codice dell'aereo. ATTERRAGGIO è collegato ad AEREO e PORTAEREI tramite il nome della portaerei su cui un aereo atterra e il codice dell'aereo che atterra. Le due query da realizzare che proprio non riesco a fare sono: 1) Elencare tutti i piloti che sono sulla stessa portaerei del pilota "Pippo". 2)Per ogni aereo si vuole sapere quante volte è atterrato su una portaerei diversa da quella di appartenenza. Per favore datemi una mano che devo capirci qualcosa entro Lunedì ![]() Grazie Andrea Ultima modifica di D4rkAng3l : 19-01-2008 alle 21:36. |
![]() |
![]() |
![]() |
#2 |
Bannato
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2682
|
Oddio non ne esco credo che questa robba vada fatta usando gli ALIAS (select nidificate escluse a priori)
Qualcosa che mi viene in mente è tipo di fare qualcosa del genere: [code] SELECT X.nome FROM PILOTA AS X, PILOTA AS Y, AEREO, PORTAEREI WHERE Y.nome = 'Pippo' AND Y.codice_aereo = AEREO.codice AND AEREO.nome_portaerei = PORTAEREI.nome_portaerei // Così facendo dovrei aver navigato per il db facendo vari join e dovrei aver trovato la portaerei sulla quale è stanziato il pilota Pippo ma ora non sò come collegarlo alla colonna X di tutti i piloti...stò alla frutta aiutatemi per favore :-( |
![]() |
![]() |
![]() |
#3 |
Bannato
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2682
|
ops c'era un errorino scritto nelle tabelle...per favore datemi una mano...sono nel panico
|
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Ad occhio dovrebbe andare, ma così hai fatto un mega tabellone
![]() Puoi usare le select annidate nel where ? SELECT X.nome FROM PILOTA, AEREO, PORTAEREI WHERE PILOTA.codice_aereo = AEREO.codice AND AEREO.nome_portaerei = (SELECT AEREO.nome_portaerei FROM PILOTA, AEREO WHERE nome = 'pippo' AND AEREO.codice_aereo = PILOTA.codice_aereo); Sempre rispettando il modo tuo di dare i nomi e di fare la query. Riguardando la tua query potresti risparmiarti la tabella PORTAEREI, visto che il nome della portaerei lo hai già in AEREO. Comunque perché non ti crei le tabelle su Access e provi da lì a scrivere la query per vedere se torna ? |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Riguardando la tua query non mi torna, bisogna anche costruire l'associazione fra il pilota di X ed il suo aereo, e solo a quel punto si può filtrare sullo stesso nome della portaerei:
SELECT X.nome FROM PILOTA AS X, PILOTA AS Y, AEREO AS Z, AEREO AS K WHERE Y.nome = 'Pippo' AND Y.codice_aereo = Z.codice_aereo AND X.codice_aereo = K.codice_aereo AND K.nome_portaerei = Z.nome_portaerei; |
![]() |
![]() |
![]() |
#6 |
Bannato
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2682
|
ti ringrazio...e circa l'altra query? anche quella mi crea problemi
![]() Per ogni aereo si vuole sapere quante volte è atterrato su una portaerei diversa da quella di appartenenza. Ultima modifica di D4rkAng3l : 20-01-2008 alle 10:25. |
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Per quello devi usare il group by...
|
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Oct 1999
Messaggi: 1565
|
Codice:
select aereo.codice, count(atterraggio.id_atterraggio) froma aereo, atterraggio where aereo.codice=atterraggio.codice_aereo and aereo.nome_portaerei<>atterraggio.nome_portaerei group by aereo.codice |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 15:22.