Dato lo schema:
UTENTE(Codice, Nome, Cognome, Età)
TEATRO(Nome, Città, Capienza)
ABBONAMENTO(ID, CodUtente, NomeTeatro, Costo)
Con vincoli di integrità referenziale:
ABBONAMENTO.CodUtente->UTENTE.Codice
ABBONAMENTO.NomeTeatro->TEATRO.Nome
Scrivere in SQL la query che determina: nome e città dei teatri che hanno
un numero di abbonati pari alla propria capienza.
Inizialmente avevo pensato di risolvere così:
La logica era: se conto quante volte compare il nome di un teatro negli abbonamenti so quanti abbonamenti sono stati emessi, poi mi basta confrontare questo numero con la capienza del teatro.codice:select nome, citta from teatro where capienza = any (select nometeatro, count(*) as numero from abbonamento group by nometeatro);
Mi sembrava corretto ma poi mi sono resa conto che se due teatri hanno la stessa capienza ma uno non compare mai negli abbonamenti viene estratto ugualmente. Quindi ho corretto così:
Il distinct l'ho messo poi perché mi sono accorta che nel risultato il nome del teatro compariva tante volte quanti sono gli abbonamenti (perché?).codice:select distinct nome, citta from teatro join abbonamento on nome=nometeatro where capienza = any (select count(*) from abbonamento group by nometeatro);
Come vi sembra?
Grazie!

Rispondi quotando

