Non riesco a trovare un modo per aggirare la mancanza di supporto di Oracle per la clausola HAVING EVERY.Oracle SQL: esiste una soluzione standard HAVING EVERY?
ho due tabelle, di produzione e di film, con il seguente schema:
Production (pid, mid)
Movie(mid, director)
dove 'pid' è in numero intero che rappresenta ID publisher, 'metà' è un numero intero che rappresenta ID di film, e il regista è il nome del regista del film.
Il mio obiettivo è ottenere un elenco di editori (per ID) che hanno pubblicato solo film diretti da Peter Jackson o Ben Affleck.
Al fine di raggiungere questo obiettivo, avevo scritto la seguente query:
SELECT *
FROM Production P, Movie M
WHERE P.mid = M.mid;
GROUP BY P.pid
HAVING EVERY (M.director IN ('Ben Affleck', 'Peter Jackson'));
Ma dal momento che Oracle non supporta avere ogni, tutto quello che ottiene è il seguente errore:
HAVING EVERY (M.director IN ('ben affleck', 'PJ'))
*
ERROR at line 5:
ORA-00907: missing right parenthesis
Perché la direzione deve applicarsi a tutti i film prodotti dall'editore, non credo che la condizione possa essere spostata nella clausola WHERE.
C'è qualche modo per aggirare questo posto di blocco? Qualcosa che è considerato "standard"? Inoltre (e forse ancora più importante) perché Oracle ha scelto di non implementare HAVING OGNI?
che sembra fare il trucco! Grazie mille. Mentre siamo qui, sai perché Oracle non ha implementato AVENDO OGNI? Mi sento come se il codice di soluzione fosse molto hacky/difficile da leggere, il che per me è un aspetto molto negativo. – Dan
+1 - Ho cancellato la mia risposta in quanto ho frainteso la richiesta di OPs. Bella risposta! – sgeddes