[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.