Info su query

di il
4 risposte

Info su query

Ciao a tutti ragazzi ho bisogno del vostro aiuto. Mi sto imbattendo in una quei sql, mi riuscite a dare una mano?

Dato il seguente schema relazionale:
ATTORE ( codAttore, cognome, nome, dataNascita)
SPETTACOLO ( codSpettacolo, nomeSpettacolo, descrizione, durata, genere, regista, anno )
PARTECIPAZIONE ( codAttore: ATTORE, codSpettacolo: SPETTACOLO, ruolo )
RAPPRESENTAZIONE ( codSpettacolo: SPETTACOLO, dataRappresentazione, numeroSpettatori)

Scrivere una query SQL che visualizzi il numero di attori (numeroAttori) che non ha partecipato a spettacoli di genere ‘Commedia’.

La query che ho realizzato io è:

SELECT COUNT(codattore) as numeroattori
FROM attore A, partecipazione P
WHERE A.codattore=P.codattore and P.codspettacolo <>(SELECT codspettacolo
FROM spettacolo S
WHERE S.genere='Commedia')

Mentre una possibile soluzione è:

SELECT COUNT(codAttore)
FROM ATTORE
WHERE codAttore NOT IN (SELECT codAttore
FROM PARTECIPAZIONE P, SPETTACOLO S
WHERE P.codSpettacolo = S.codSpettacolo
AND genere = ‘Commedia’)

Ora vi chiedo, la query da me proposta può andar bene o è sbagliata?

Grazie in anticipo

4 Risposte

  • Re: Info su query

    Non è un granchè
    dovresti usare un NOT IN
  • Re: Info su query

    Dici al posto del"<>"?
    Vero, come qualità non è granché.
    Dici che funzionerebbe?
  • Re: Info su query

    Perchè usi il condizionale?
    occorre che tu sappia esattamente il perchè e il percome funziona, non è che puoi andare "a casaccio" sperando di avere fortuna.
    il <> non serve a un granchè, visto che vuoi fare un confronto uno-contro tutti.
    La logica può essere di due tipi:
    - un join "fallito"
    - un NOT IN (qualcosa)
    il secondo prevede l'utilizzo di sub-query materializzate, o le prestazioni sono ridicolmente basse.

    Scrivi la tua "risposta definitiva" (non a casaccio) e ne parliamo
  • Re: Info su query

    Il condizionale era per avere una conferma perché non son sicuro che sia giusta ne tanto meno sbagliata.
    Comunque la mia "risposta definitiva" è:

    SELECT COUNT(codattore) as numeroattori
    FROM attore A, partecipazione P
    WHERE A.codattore=P.codattore and P.codspettacolo NOT IN(SELECT codspettacolo
    FROM spettacolo S
    WHERE S.genere='Commedia')
Devi accedere o registrarti per scrivere nel forum
4 risposte