Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1

    codice SQL da access query complessa

    Ciao a tutti ragazzi,vi spiego il mio problema in italiano e soprattuto con un filo logico : sto realizzando un database abbastanza complesso relativo ad una società di eventi che realizza campionati di calcio a 4.

    Essendo che di occupo un pò di tutto,ma nello specifico tocco pochi rami,sto cercando di realizzare il database con le mie forze e fino ad ora,al livello logico nessun problema: le tabelle sono state create e senza che logicamente parlando il sistema fili.

    Il problema è un altro: per riuscire a collegare le varie tabelle con MYSQL mi aiuto,essendo non molto pratico di codice SQL,con Access ed il relativo codice da esso generato adattandolo a mysql.

    Ora essendo che vorrei capirci meglio e non trascurare il "perchè" questo codice viene generato sto cercando di studiarlo per riuscire a liberarmi di Access e realizzare il codice da me.

    Ho realizzato una query per sapere quanti gol ha effettuato X giocatore durante un incontro ben definito.

    Nell'allegato trovate lo schema logico delle varie relazioni.

    E questo è il relativo codice generato:

    SELECT Count(id_gol) AS gol_Eseguiti
    FROM squadra AS squadra_A INNER JOIN ((squadra AS squadra_B INNER JOIN partita ON squadra_B.id_squadra = partita.id_squadrab) INNER JOIN (giocatore INNER JOIN gol_fatti ON giocatore.id_giocatore = gol_fatti.id_giocatore) ON partita.id_partita = gol_fatti.id_partita) ON squadra_A.id_squadra = partita.id_squadra
    WHERE (((giocatore.nome)="Francesco") AND ((giocatore.cognome)="Pedone"));


    Che funge perfettamente su Mysql. Ora la mia domanda è: come ci arriva a creare una doppia parentesi tonda fra il primo inner join e a chiuderla fra gol_fatti.id_partita? Inoltre: esiste la possibilità di avere il medesimo risultato con un codice un pò più semplificativo??

    Oltre a questo,se provassi ad unire nello schema E/R la primary Key di squadra_A con giocatore.id_squadra al fine di sapere in che squadra gioca X giocatore,mi restituisce il seguente codice:

    SELECT Count(id_gol) AS gol_Eseguiti
    FROM squadra AS squadra_A INNER JOIN ((squadra AS squadra_B INNER JOIN partita ON squadra_B.id_squadra = partita.id_squadrab) INNER JOIN (giocatore INNER JOIN gol_fatti ON giocatore.id_giocatore = gol_fatti.id_giocatore) ON partita.id_partita = gol_fatti.id_partita) ON (squadra_A.id_squadra = giocatore.id_squadra) AND (squadra_A.id_squadra = partita.id_squadra)
    WHERE (((giocatore.nome)="Francesco") AND ((giocatore.cognome)="Pedone"));


    a che serve quel "AND" li? Ci arrivo al fatto che collega le varie tabelle..ma perchè non utilizza un altro INNER JOIN? Vi ringrazio in anticipo e sopratutto per la pazienza ragazzi
    Immagini allegate Immagini allegate

  2. #2

    Re: codice SQL da access query complessa

    Originariamente inviato da smartgyverblog
    a che serve quel "AND" li? Ci arrivo al fatto che collega le varie tabelle..ma perchè non utilizza un altro INNER JOIN? Vi ringrazio in anticipo e sopratutto per la pazienza ragazzi
    per risparmiare - anche sul ragiornamento. una JOIN con DUE parametri è perfettamente lecito (ma anche tre, quattro ecc )

  3. #3
    perdonami ma non ho ben recepito? in che senso scusa?

  4. #4
    cosa non hai ben recepito?

  5. #5
    si,ri ringrazio in primis per la risposta(non l'ho fatto prima). Tutto il concetto in se: volevo sapere come mai mette AND invece di fare un INNER JOIN ex novo. Inoltre le doppie partesi cosa stanno a significare? Serve per mantere "attivo" il collegamento con la tabella partite in modo tale da evitare la ripetizione del Alias che altrimenti andrebbe ad incappare in un errore visto che lo stesso nome della tabella nelle join non possono essere ripetute? Inoltre volevo sapere se esiste un modo piu' semplice per effettuare la medesima SELECT senza utilizzare tutto questo codice(magari con delle unioni implicite tramite Where).

    Mi potresti fare qualche esempio se così fosse? Ti ringrazio.

  6. #6
    mah, ti ho già risposto, comunque ripeto: perché RIfare una INNER JOIN se basta mettere la doppia chiave? così risparmi codice (cosa che a te interessa, vedo...)

  7. #7
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Questo thread potrebbe interessarti:

    http://forum.html.it/forum/showthrea...ghlight=calcio

    ti mostra come gestire classifica e statistiche varie senza bisogno di usare due tabelle identiche per le squadre come hai fatto tu.

    Per quel che riguarda i gol vedo che fai una cosa abbastanza sommaria, nel senso che ti limiti a riportare per ogni partita i marcatori.

    Aggiungerei quanto meno un campo per identificare le eventuali autoreti.

  8. #8
    vi ringrazio ragazzi XD.


    Tuttavia sto ancora cercando di capire nel merito il codice generato da access in questione. Le entità sono oltre 17 quindi ci son parecchie voci,però effettivamente non avevo pensato al discorso delle autoreti XD.

    Se ho dei dubbi vi faccio assolutamente sapere.

  9. #9
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Una domanda in merito alla tua struttura: è contemplata la possibilità che durante il campionato un giocatore cambi squadra o non c'è il mercato di riparazione?

  10. #10
    no assolutamente. Un giocatore appartiene ad una squadra ed Amen.

    Tuttavia: sto provando a realizzare la stringa SQL da me per vedere se ho capito ed ho prodotto questo(che mi va in errore):

    SELECT Count(id_gol) AS gol_Eseguiti
    FROM gol_fatti INNER JOIN ( giocatore ON gol_fatti.id_giocatore = giocatore.id_giocatore) INNER JOIN ( partita INNER JOIN (squadra AS squadra_A ON squadra_A.id_squadra = partita.id_partita) AND ( squadra AS squadra_B ON squadra_B.id_squadra = partita.id_partita) ON gol_fatti.id_partita = partita.id_partita


    ho già capito che la stringa che da errore è come dice anche il parser questa parte " ( giocatore ON gol_fatti.id_giocatore = giocatore.id_giocatore)"

    sto provando ad "iniziare" ad unire le tabelle da gol_fatti rispetto che a squadra_A come ha preferibilmente fatto ACCESS,cercando di capire se esistono strade alternative al codice scritto da quest'ultimo.

    Qualche dritta?

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.