Scusa ma di quali slide stai parlando?
Di quelle che ha reso disponibile il mio prof.
Ah benissimo.
Io ho serissimi dubbi che quella query possa funzionare. Per come la leggo io, estrae i nomi dei registi che non hanno nemmeno un film nel quale hanno recitato senza esserne registi. Questo significa che qualsiasi regista non abbia recitato in nessun film viene estratto, il che non è ciò che chiede il problema.
Quando ho tempo provo a buttare giù una query. Nel frattempo potresti verificare quello che ho scritto creando una piccola base dati con le casistiche che ho esemplificato e vedere cosa succede usando quella query![]()
Ultima modifica di luca200; 07-06-2016 a 14:15
Devo dire che non sarebbe nemmeno così strano che la query non funzioni...ho già trovato diversi (piccoli) errori nelle slide!! Ok proverò a creare un minidatabase per vedere se la query funziona.
Non riesco ad eseguirla perché mi dà un errore di sintassi che onestamente non riesco ad individuare!
mysql> select nome
-> from regista r1
-> where (not exists (select * from film f
-> where ((f.titolo=any
-> select r.titolofilm
-> from recitazione r
-> where (r.nomeattore=r1.nome)) and (r1.nome<>f.regista))));
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'select r.titolofilm
from recitazione r
where (r.nomeattore=r1.nome)) and (r1.nom' at line 5
Ultima modifica di Jamie04; 07-06-2016 a 15:23
dopo any devi aggiungere una parentesi e chiuderla in fondo
Hai ragione mi sembra che la query non funzioni. Mi restituisce tutti i registi. Cioè questo mette nelle slide esempi che non vanno...
L'unica cosa di cui non sono sicura è concettualmente un regista deve essere inserito anche nella tabella attore, qualora ovviamente sia anche un attore? Io non l'ho fatto ma ai fini della query è ininfluente visto che la tabella attore non viene utilizzata.
In realtà, nel caso descritto le tabelle regista e attore sono completamente inutili.
Per come è strutturato il db, sia registi che attori hanno il nome come chiave, e l'unico dato oltre alla chiave è la data di nascita, che però non è mai utilizzata nel problema. Quindi in realtà puoi lavorare semplicemente con i dati delle altre due tabelle, che contengono i nomi
Ok, quindi nella query posso utilizzare solo le tabelle recitazione e film alla fine... purtroppo la mia capacità di elaborare questa query si ferma qua![]()
Molto volgarmente avrei risolto così:
SELECT DISTINCT NOMEATTORE AS REGISTA
FROM FILM, RECITAZIONE
WHERE (REGISTA=NOMEATTORE);
Chiaramente non è la soluzione che avrei dovuto elaborare visto che si sta parlando di query nidificate inoltre ho usato lo "stratagemma" di andarmi a pescare il nomeattore da recitazione invece che il nome del regista dalla tabella regista... però sembra funzionare.
Comunque lo scopo è capire bene come elaborare query nidificate che rispondono a quesiti complessi quindi sono ancora lontana dalla strada giusta![]()