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ì:
codice:
select nome, citta
from teatro
where capienza = any (select nometeatro, count(*) as numero 
from abbonamento 
group by nometeatro);
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.
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ì:

codice:
select distinct nome, citta 
from teatro join abbonamento on nome=nometeatro
where capienza = any (select count(*) from abbonamento group by nometeatro);
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é?).
Come vi sembra?
Grazie!