SQL per estrarre solo le entry doppie

di il
3 risposte

SQL per estrarre solo le entry doppie

Carissimi sono nuovo di questo forum e dopo averle provate tutte ....davvero tutte ,
ho deciso di scrivere a voi sperando che qualcuno abbia 5 minuti liberi per me.

La mia esigenza e' abbastanza semplice per voi. Vi spiego la situazione.

Io ho tre tabelle:

risultati(id,idgara,idatleta,etc,etc,)
gare(id,nome,etc,etc)
atleti(id,nome,etc,etc)

poi ci sono altri campi che in questo momento non sono interessanti.

La query che devo fare passa in input due idatleta e quello di cui avrei bisogno e'
la visualizzazione dei soli eventi a cui hanno partecipato entrambi.

Per darvi un esempio parliamo di Tennis.

risultati (1, 11, 21)
risultati (2, 12, 21)
risultati (3, 12, 22)

gare (11, "TORNEO TENNIS 1")
gare (12, "TORNEO TENNIS 2")

atleti(21, "Rossi Carlo")
atleti(22, "Bianchi Massimo")

quindi dvorei vedere il torneo "2" quello con la partecipazione di entrambi.

La tabella "madre" risultati e' legata alle altre due cosi':

risultati , gare
--------- , ---------
idgara -------------> id

risultati , atleti
--------- , ---------
idatleti -------------> id


a parte lo schema un po' troppo rozzo , posso dirvi che ci sono vincoli
di integrita referenziale fra le tre tabelle ovvero:

risultati(idatleti)->atleti(id)
risultati(idgare)->gare(id)

Quindi il mio obiettivo e' quello di visualizzare , e non di contare, solo i risultati
in cui sono presenti i due atleti passati come input.

Chi di voi mi puo' aiutare ?
Grazie a tutti !
Saluti
Willy

3 Risposte

  • Re: SQL per estrarre solo le entry doppie

    Ciao Willy,
    se non ho capito male il torneo che vuoi è il 12 non il 2.
    Prova con questo e fammi sapere. Spero di non aver fatto errori.

    create table risultati(id int,idgara int,idatleta int);
    create table gare(id int ,nome varchar(20));
    create table atleti(id int,nome varchar(20));
    insert into risultati values(1, 11, 21),(2, 12, 21),(3, 12, 22);
    insert into gare values(11, "TORNEO TENNIS 1"),(12, "TORNEO TENNIS 2");
    insert into atleti values(21, "Rossi Carlo"),(22, "Bianchi Massimo");


    create view r as select idgara,idatleta from risultati;
    create view s as select id as idatleta from atleti;
    create view t1 as select idgara from r;
    create view t2 as select * from t1,s;
    create view t3 as select * from t2 where (idgara,idatleta) not in (select idgara,idatleta from r);
    create view t4 as select idgara from t3;
    create view t5 as select distinct idgara from t1 where idgara not in (select idgara from t4);
  • Re: SQL per estrarre solo le entry doppie

    Haem... l'utilizzo di view multiple mi lascia un pochino perplesso.
    l'utilizzo di NOT IN presuppone l'uso di mariadb per una certa efficienza (invece del nested terribile che viene fatto da mysql).
    Insomma... ripenserei pun pochino
  • Re: SQL per estrarre solo le entry doppie

    Ciao
    cosi trovi le gare con almeno 2 partecipanti
    
    select idgara from risultati group by idgara having count(*)>1
    
    se ti serve usa questa query come sottoquery per filtrare i risultati
Devi accedere o registrarti per scrivere nel forum
3 risposte