Ciao a tutti,

sto seguendo un corso di Basi di Dati e... non ci capisco granché.

Mi sono stati dati questi 3 esercizi e io ci ho messo tutta la mia buona volontà, ma con scarsi risultati (Ho testato le soluzioni da me proposte su un server sql ed è da ieri che sbatto la testa contro errori che proprio non capisco!).

Potete controllare cosa c'è di sbagliato? Grazie mille :-)

Cominciamo con il primo

Sono date le relazioni seguenti (le chiavi primarie sono sottolineate):

PITTORE(CodP, NomeP, DataNascita, Nazione)
QUADRO(CodQ, Titolo, CodP)
ESPOSIZIONE(CodQ, DataInizio, DataFine, NomeGalleria)

Per ogni nazione, visualizzare il codice del pittore che ha dipinto il numero massimo di
quadri e il relativo numero di quadri dipinti.

La soluzione da me proposta è:
SELECT P.CodP, COUNT(Q.CodQ) AS NumQ, P.Nazione
FROM Pittore P, Quadro Q
WHERE P.CodP=Q.CodP
GROUP BY CodP, Nazione
HAVING MAX(NumQ)

Inutile dire che non funziona... eppure a me sembra tutto corretto :O

Idee?


Continuiamo col secondo esercizio

Sono date le relazioni seguenti (le chiavi primarie sono sottolineate):

MAESTRO-SCI(CodFiscale, DataNascita, Residenza, Nome, Cognome)
CORSO-SCI(CodC, Nome, Livello)
CLASSE(CodC, NumClasse, NumIscritti)
CALENDARIO-LEZIONI(CodC, NumClasse, Data, CodFiscale)

Per le classi che hanno un numero di iscritti superiore alla media del corso a cui fanno
riferimento, e che non sono mai state seguite da maestri nati prima del 1980, visualizzare il
codice del corso, il numero della classe, la data della prima e dell'ultima lezione eff ettuata.

Soluzione da me proposta:

SELECT DISTINCT CodC, NumClasse, MIN(Data), MAX(Data)
FROM CALENDARIO-LEZIONI
WHERE CodC IN (
SELECT CL.CodC
FROM CALENDARIO-LEZIONI CL, MAESTRO-SCI MS
WHERE CL.CodFiscale = MS.CodFiscale
AND MS.DataNascita > 1980
AND CL.CodC IN (
SELECT CodC
FROM CLASSE
GROUP BY CodC
HAVING NumIscritti > AVG(NumIscritti)
))

Se qualcuno mi spiega dove ho sbagliato, gli sarò grato per l'eternità.

Umberto