[Basi di dati] Una semplice query
Salve ragazzi, avrei un problemino con questo esercizio:
Io l'ho risolto così:
Mentre la soluzione dice:
Io penso che la query della soluzione non mi restituisca l'elenco dei responsabili, ma l'elenco di tutti gli impiegati che partecipano a progetti con budget >= 100000
Qualcuno potrebbe spiegarmi perchè quello che sto dicendo è sbagliato se la soluzione è giusta?
Grazie per l'attenzione.
Sia dato il seguente schema di base di dati: IMPIEGATO(IDImpiegato, Reparto, Stipendio, Nome, Cognome, AnnoNascita, Indirizzo) PROGETTO(Nome, Sede, IDResponsabile, Budget) PARTECIPAZIONE(IDPartecipante, IDProgetto, Mansione) Scrivere la query SQL per trovare: L’elenco dei responsabili dei progetti con budget maggiore di 100000 Euro
Io l'ho risolto così:
select I.Cognome, I.Nome from PROGETTO, IMPIEGATO I, PARTECIPAZIONE where IDImpiegato=IDPartecipante and IDProgetto=PROGETTO.Nome and IDImpiegato= any ( select IDResponsabile from PROGETTO where Budget>=100000 )
Mentre la soluzione dice:
select I.Cognome, I.Nome from PROGETTO, IMPIEGATO I, PARTECIPAZIONE where IDImpiegato=IDPartecipante and IDProgetto=PROGETTO.Nome and IDResponsabile= any ( select IDResponsabile from PROGETTO where Budget>=100000 )
Io penso che la query della soluzione non mi restituisca l'elenco dei responsabili, ma l'elenco di tutti gli impiegati che partecipano a progetti con budget >= 100000
Qualcuno potrebbe spiegarmi perchè quello che sto dicendo è sbagliato se la soluzione è giusta?
Grazie per l'attenzione.
Risposte
Anche io la penso come te riguardo alla soluzione postata. Non viene infatti richiesto da nessuna parte nella condizione che il responsabile debba essere uguale all'impiegato. Non è comunque inoltre chiaro lo scopo di usare anche la tabella PARTECIPAZIONE. A meno che io abbia frainteso qualcosa è infatti sufficiente fare qualcosa come il seguente:
o anche qualcosa come il seguente
select Cognome, Nome from IMPIEGATO where IDImpiegato in (select IDResponsabile from PROGETTO where Budget >= 100000);
o anche qualcosa come il seguente
select Cognome, Nome from IMPIEGATO, PROGETTO where IDImpiegato = IDResponsabile and Budget >= 100000
select Cognome, Nome from IMPIEGATO, PROGETTO where IDImpiegato = IDResponsabile and Budget >= 100000
Sisi avrei anche potuto fare così, in effetti non c'era bisogno di coinvolgere la tabella partecipazione.
"apatriarca":
Anche io la penso come te riguardo alla soluzione postata.
Ok grazie mille, infatti ero convinto che fosse sbagliata.