Select di colonne di due tabelle e group by

di il
8 risposte

Select di colonne di due tabelle e group by

Salve, vorrei chiedere un piccolo aiuto.
Ho una tabella Produttore con Primary Key codice_produttore e attributi nome, cognome e seconda tabella Film con Primary Key codice_film, foreign key id_produttore (codice_produttore) e attributi nome, genere e durata

Dovrei scrivere due metodi per avere una mappa con chiave il nome del produttore e come valore la lista dei suoi film.

Ho provato la query "SELECT p.nome_produttore as nomep, f.nome, f.genere, f.durata FROM database.produttore as p INNER JOIN database.film as f ON f.id_produttore = p.codice_produttore GROUP BY p.codice_produttore"

Il problema è che nel momento dell'esecuzione mi fa mettere anche gli attributi del film, dandomi poi come risultato il nome del produttore e la lista di tutti i film anche di diversi produttori.
Come potrei risolvere?

Nel secondo metodo dovrei creare una lista con un oggetto che ha come attributi il nome del produttore, nome del film e la sua durata.
E fare la lista mostrando solo il film con la durata maggiore.

Nella query faccio "SELECT p.nome as nomep, f.nome as nomef MAX (f.durata) as duratamax FROM database.produttore as p INNER JOIN database.film as f ON f.id_produttore = p.codice_produttore GROUP BY p.codice_produttore"

Però anche qui stesso problema di prima.

8 Risposte

  • Re: Select di colonne di due tabelle e group by

    Ciao,
    ma le due query ti funzionano?

    O ti restituisco errori!!?

    Quando utilizzi il group by, la clausola del group by deve essere presente nella select.

    Quando scrivi codice utilizza i tag CODE. È più leggibile.

    Benvenuto/a nel forum!

    Ciao
  • Re: Select di colonne di due tabelle e group by

    Ciao, grazie per il benvenuto!

    Allora mettendo tutti gli attributi le query funzioano, però io dovrei raggrupparle solo per ogni produttore ecco perché nelle group by mettevo solo l'id produttore ma in quel caso non funzionavano..

    Mi servirebbe una query scritta su java che mi permetta di fare una mappa con chiave il nome del produttore e come valore la lista dei suoi film
    Ed un'altra una lista di un terzo oggetto che come parametri ha il nome del produttore, il nome del film e la sua durata in modo da ottenere nella lista i produttori e i loro film con la durata massima

    Purtroppo sono nuovo nell'ambito sql quindi non me ne intendo molto.
  • Re: Select di colonne di due tabelle e group by

    Pathetic ha scritto:


    Allora mettendo tutti gli attributi le query funzioano, però io dovrei raggrupparle solo per ogni produttore ecco perché nelle group by mettevo solo l'id produttore ma in quel caso non funzionavano
    Bisogna usare la WHERE:
    SELECT p.nome_produttore as nomep,
        f.nome,
        f.genere,
        f.durata
    FROM database.produttore as p
        INNER JOIN database.film as f ON f.id_produttore = p.codice_produttore
    WHERE p.codice_produttore = 1
    Così filtri solo i film associati al produttore con codice 1
  • Re: Select di colonne di due tabelle e group by

    Però in questo caso non avrei una lista dei film solo del produttore con codice 1?
    C'è un modo per avere la mappa di tutti i produttori e la lista dei loro film senza scegliere un produttore preciso?
  • Re: Select di colonne di due tabelle e group by

    Togli la WHERE e li prende tutti. Secondo me ti conviene studiare bene le basi del SQL prima di cimentarti...
  • Re: Select di colonne di due tabelle e group by

    Aspetta, io l'ho capito come funziona, ora non capisco se è il prof che mi ha dato un esercizio impossibile.

    Senza la where mi esce

    Prod 1: (tutti i film della lista)
    Prod2: (tutti i film della lista)

    Quando a me servirebbe

    Prod 1: (lista dei suoi film associati al suo id)
    Prod 2: (lista dei suoi film associati al suo id)

    Tutto questo in un'unica query che devo scrivere in un metodo che mi restituisca la mappa con K/V detti sopra.
  • Re: Select di colonne di due tabelle e group by

    Ciao,
    come sono strutturate le tabelle?

    Se ti servono i film associati ad un ID specifico c'è da aggiungere un WHERE come ti è stato detto.

    Il JOIN mette in relazione le due tabelle tramite, per esempio l'ID. La relazione può anche avvenire utilizzando più condizione nel JOIN, non è per forza una condizione. Quindi ti espone N record che soddisfano le o la condizione del JOIN.

    Per filtrare utilizzi il WHERE.

    Ti faccio 2 esempi:

    1. JOIN con più condizioni
    
    SELECT * FROM t1 INNER JOIN t2 ON t1.id = t2.id AND t1.x = t2.x WHERE t2.id = 1
    
    2. JOIN con una condizione
    
    SELECT * FROM t1 INNER JOIN t2 ON t1.id = t2.id WHERE t2.id = 1
    
    Spero di essere stato chiaro.

    Ciao
  • Re: Select di colonne di due tabelle e group by

    Salve, alla fine ho risolto

    La query bastava quella di tutti i film in generale

    I cambiamenti dovevo farli nella struttura della mappa
    Grazie a tutti!
Devi accedere o registrarti per scrivere nel forum
8 risposte