Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Sql , relazioni ricorsive

    Salve , volevo un aiuto ad eseguire alcune query ricorsive sql.


    Squadra(Nome,Citta)
    Partita(SquadraDiCasa*,SquadraOspite*,GoalCasa,Goa lOspiti,Turno)
    Formulare la seguente interrogazione in SQL.
    a) (punti 2) creare le tabelle;
    b) (punti 3) Trovare il numero di vittorie dell'Udinese contro squadre di Roma".
    c) (punti 4) Trovare per ciascun turno la media dei goal fatti dalla squadra di casa escludendo le
    partite il cui la squadra ospite è di Milano, e non considerando i turni in cui ci sia almeno una partita
    in cui la squadra di casa ha segnato 5 o più goal".

    Non ho ben capito come lavorare su relazioni ricorsive , quindi se qualcuno di buon cuore mi saprebbe risolvere gli esercizi li potrei confrontare con le mie soluzioni per capire gli errori

    Grazie

  2. #2
    Utente di HTML.it L'avatar di r1cky`
    Registrato dal
    Feb 2007
    Messaggi
    432
    Posta le tue soluzioni che gli diamo un occhio

  3. #3
    TbSquadra
    Nome*
    Citta

    TbPartita
    SquadraDiCasa*
    SquadraOspite*
    Data*
    GoalCasa
    GoalOspiti
    Turno


    a) Con le CREATE non sono bravo. Di solito uso interfacce grafiche

    b)
    codice:
    SELECT count(*) as N_VittorieUdinese
    FROM Partita P
    WHERE 
    (SquadraDiCasa = 'Udinese' AND SquadraOspite IN (SELECT Nome FROM Squadra WHERE Citta = 'Roma') AND GoalCasa > GoalOspiti)
      OR
    (SquadraDiCasa IN (SELECT Nome FROM Squadra WHERE Citta = 'Roma') AND SquadraOspite = 'Udinese' AND GoalCasa < GoalOspiti)
    c) Troppo complessa, non ho tempo di fartela :P

  4. #4
    Grazie per la 2 l'avevo sbagliata infatti
    Mentre la 3 l'ho provata a farla ma dire che mi è uscita na chiavica è a dir poco

    (SELECT AVG(GoalCasa) FROM partita)

    EXCEPT

    ((SELECT squadraospite FROM partita, squadra WHERE partita.squadraospite=squadra.nome AND Città='Milano')

    UNION
    (SELECT squadradicasa FROM partita , squadra WHERE partita.squadradicasa=squadra.nome
    AND goalcasa>=5))

    GROUP BY turno

    Mah so che è errata quindi se qualcuno potrebbe correggerla mi farebbe un piacere
    Ah un altra cosa, non riesco a ricordare se cè un modo per togliere di mezzo EXCEPT , le union credo di si con IN e OR però in questo caso trovo piu logico usare UNION anche se per il DBMS è meglio l'IN. Se qualcuno ha alcuni minuti da perdere e mi saprebbe dire come farla "piu elegante" e corretta gliene sarei grato ^^

  5. #5
    Più elegante e corretto sarebbe l'uso del congiuntivo quando scrivi!

    Scusa non ho resistito

    Seriously: adesso devo andare via.
    Forse domani potrei avere tempo di darci un'occhiata.....

  6. #6
    uhm avesse avesse e avesse

    Mi faresti un grande piacere se controllassi domattina la query :=) mi serve al piu presto possibile
    Grazie

  7. #7
    codice:
    SELECT AVG(GoalCasa) 
    FROM TbPartita
    JOIN TbSquadra ON TbPartita.SquadraOspite = TbSquadra.Nome
    	AND TbSquadra.Citta <> 'Milano' /* Non ricordo se su MySQL è <> o != */
    WHERE 
    Turno NOT IN
    (
    SELECT Turno FROM TbPartita
    WHERE GoalCasa >= 5
    GROUP BY Turno
    )
    Non sono sicuro che la sintassi sia esente da errori.
    Ci sta che la GROUP BY sia facoltativa (o che addirittura non funzioni se non c'è niente da aggregare), o che vada sostituita da "SELECT DISTINCT Turno FROM..".

    Le Join con quest astruttura non è che mi entusiasmino... avere due chiavi esterne in TbPartita mi fa venire dei dubbi.

    E poi, come ho scritto nel commento, non mi ricordo se il simbolo di "diverso" è '<>' o '!='.

    Per il resto credo che dovrebbe funzionare. Però dovresti provarla e vedere se il risultato è quello giusto. Non sono sicuro che sia perfetta.


    Per il resto, ti ripeto, io aggiungerei anche un campo Data come Primary Key nella tabella Partita, altrimenti rischi di trovarti due partite con stessa squadra di casa e stessa squadra ospite che potrebbero confondersi.

    Fai sapere

    Ciao ciao

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.