Salve a tutti,
Devo risolvere in PSQL (va bene anche in SQL stantard o Microsoft Access, posto qui dato che non esiste una sezione di PSQL e dato che questa è la sezione più attiva e inerente all'argomento)
Questa è la mia base di dati, dato dal seguente schema logico relazionale:
Editori (codice, nome, indirizzo, citta)
Librerie (codice, nome, indirizzo, citta)
Autori (nome, nascita, morte*, nazione)
Pubblicazioni (codice, titolo, data stampa, autore (fk), editore(fk))
Giacenze (libreria (fk), pubblicazione (fk), copie disponibili)
Vendite(libreria (fk), pubblicazione (fk), data, copie vendute)
Estrarre i nomi degli editori le cui pubblicazioni sono disponibili solo nelle librerie della stessa città dell’editore.
Riporto di seguito come ho risolto io:
select e.nome
from editori as e librerie as l, pubblicazioni as p, giacenze as g
where (e.citta = l.citta and
e.codice = p.editore and
g.libreria = l.codice and
g.pubblicazione = p.codice and
g.copie_disponibili is not null)
order by e.nome
group by e.nome;
Il problema è che con il mio codice ottengo gli editori che hanno almeno una pubblicazione disponibile nella loro città, al contrario di quello che viene richiesto, ovvero che le pubblicazioni siano disponibili solo nella loro città, non so come fare proprio a livello logico (stupido me ), qualcuno riesce a darmi una mano molto gentilmente?
Grazie in anticipo
Update: nell'attesa di una risposta ho provato a risolvere cosi (ma non so se sia corretto dato che mi mancano gli attributi che compongono la base di dati):
select e.nome
from editori as e, librerie as l, giacenze as g, pubblicazioni as p
except
select e.nome
from editori as e
where e.nome not in (select nome
from editori as e, librerie as l
where e.citta = l.citta)
gruop by e.nome
having (e.codice = p.codice and
g.librerie = l.codice and
g.pubblicazione = p.codice and
g.copie_disponibili is not null)
order by e.nome;