![]()
Non te la potevi far spiegare direttamente dal prof?![]()
Dai....aspetta un pò e qualcuno ti aiuta....
![]()
Non te la potevi far spiegare direttamente dal prof?![]()
Dai....aspetta un pò e qualcuno ti aiuta....
Mi e' arrivata via mail da un amico!
Non riesce a capire il secondo select del where
“Due cose sono infinite: l'universo e la stupidità umana, ma riguardo l'universo ho ancora dei dubbi! (A.Einstein)”
select nome, cognome from Impiegato
vabbè seleziona nome e cognome dell'impiegato
Se i not exist restituiscono il select senza righe, allora restituisce false. Quindi selezionerò gli impiegati con entrambi i non exist della clausola di where veri, cioè contenti righe
select * from lavora_su B where (B.ID_Prog_lav in (select ID_Prog from progetto where ID_Dip_gestore=3))
Seleziona quelli che lavorano almeno su un progetto del DIP_3
sono bloccato qui![]()
“Due cose sono infinite: l'universo e la stupidità umana, ma riguardo l'universo ho ancora dei dubbi! (A.Einstein)”
Il secondo not exist controlla che ogni progetto del dipartimento 3 sia gestito dall'impiegato... [penso sia così non ne sono sicuro]
La mia soluzione è moolto confusa...qualcuno riesce a capirci qualcosa meglio?
“Due cose sono infinite: l'universo e la stupidità umana, ma riguardo l'universo ho ancora dei dubbi! (A.Einstein)”
“Due cose sono infinite: l'universo e la stupidità umana, ma riguardo l'universo ho ancora dei dubbi! (A.Einstein)”
Allora, sono arrivato a questa conclusione, datemi conferma...
La query estrae nome e cognome dell'impiegato (mortacci suoi) se, per l'impiegato attualmente selezionato, tutta la parte restante della query non estrae nulla, ovvero "not exists".
Per tutto il resto della query si inverte quindi il ragionamento e si cercano progetti del dip 3 a cui NON lavora l'impiegato selezionato: prima cerchiamo i progetti gestiti dal dip 3 (dal select * fino al ID_Dip_gestore=3).
Dopodiche' (dal secondo not exists) si selezionano gli assegnamenti ai progetti dove compare il codice fiscale dell'impiegato in questione (where C.CF_Imp=CF) e il cui dipartimento gestore sia quello selezionato poco prima ovvero il dip.3.
Quindi ricapitolando:
si estraggono i dati dell'impiegato se non esiste un progetto gestito dal dip.3 a cui non lavora l'impiegato...
Mi chiedo se anziche' tutti questi annidamenti si sarebbe potuto snellire la query con dei join...
Ma se la subquery del non exist ritorna zero righe lui restituisce false!Allora, sono arrivato a questa conclusione, datemi conferma...
La query estrae nome e cognome dell'impiegato (mortacci suoi ) se, per l'impiegato attualmente selezionato, tutta la parte restante della query non estrae nulla, ovvero "not exists".
http://dev.mysql.com/doc/mysql/en/ex...ubqueries.html
“Due cose sono infinite: l'universo e la stupidità umana, ma riguardo l'universo ho ancora dei dubbi! (A.Einstein)”
Se guardi il terzo esempio dalla pagina che hai linkato, beh e' molto simile a questo, cerca i negozi esistenti in tutte le citta', quindi cerca i negozi dove non esiste una citta' che non li abbia.
Intricato ma conferma il ragionamento mi pare![]()
Si Spera...vabbè dai io ho fatto tutto al contrario![]()
“Due cose sono infinite: l'universo e la stupidità umana, ma riguardo l'universo ho ancora dei dubbi! (A.Einstein)”