Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    442

    Query con più livelli di annidamento

    Mi astraggo dall'esercizio in particolare per avere indicazioni di carattere generali.
    Supponiamo che io debba fare una query in cui devo pescare dati da 3 tabelle, diciamo tab1, tab2, tab3, e non possa usare il join. Per risolvere potrei usare 3 query di cui 2 annidate?
    Ma il problema è: come decido in che modo "collegare" i dati delle 3 tabelle fra loro e quale tabella deve avere il più basso livello di annidamento? Se l'esercizio mi chiede un conteggio, ad esempio, e solo quello...l'attributo che metto nel count può essere usato allo scopo? E ovviamente deve stare nella query più esterna?
    Ultima domanda: se faccio una query del tipo:
    SELECT
    FROM
    WHERE NOT EXISTS (ALTRA SELECT)
    Posso mettere un'altra condizione (relativa a dati che sono nella tabella del from più esterno) dopo il WHERE?

    Oggi mi è venuto questo dubbio terribile!

    SELECT X
    FROM Y
    WHERE NOT EXISTS (ALTRA SELECT) AND ALTRACONDIZIONE SU Y

    Nel dubbio ho preferito inserire un join nella select più interna.
    Grazie!
    Ultima modifica di Jamie04; 27-07-2016 a 19:13

  2. #2
    non puoi usare JOIN né implicite né esplicite? o semplicemente nella query non deve comparire la parola JOIN ?

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    442
    Le implicite sono quelle dove la clausola di "collegamento" compare nel where, giusto? No, nemmeno quelle.

  4. #4
    boh, la vedo dura e anche abbastanza inutile -- insistisci qualcuno che saprà risponderti lo trovi

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    442
    Vabbè ti dico il testo dell'esercizio, così magari è più "facile".
    Dato lo schema:
    GIOCATORE(Codice, Nome, Cognome, AnnoNascita)
    CONTRATTO(Id, CodiceGiocatore, NomeSquadra, Ingaggio)
    SQUADRA(Nome, Città)
    Con vincoli:
    Contratto.CodiceGiocatore-->Giocatore.Codice
    Contratto.NomeSquadra-->Squadra.Nome

    Trovare il n° di squadre di Bologna che hanno avuto sotto contratto il giocatore Tizio Caio.
    Vincolo: Non è possibile usare il join fra tabelle nella clausola from.

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    442
    Una possibile soluzione:
    codice:
    select count(*) as squadreRossi
    from squadra
    where citta='bologna' and nome=ANY 
    (select nomesquadra from contratto where codiceGiocatore= ANY
    (select codice from giocatore where nome='Tizio' and cognome='Caio'));
    L'ho provata e mi sembra funzionare. Ma non è farina del mio sacco
    Ultima modifica di Jamie04; 31-07-2016 a 15:31

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    442
    Piccola curiosità, anche senza il "distinct" nel count la query non mi conta 2 volte la stessa squadra, cioè quando il giocatore Tizio Caio ha avuto contratto con la stessa squadra (di bologna) in anni diversi. Perché?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.