PDA

View Full Version : -->URGENTE<-- interrogazione SQL


giannimesa
08-01-2007, 19:19
ciao ragazzi urgerebbe un aiutino per un interrogazione in SQL...

lo schema è questo
ATLETI (CodFisc , Nome, Nazione, DataNas)
GARE (CodGara,Specialità,Disciplina, Data, Sede)
PARTECIPA (Atleta,Gara,PosizArrivo)

e l'interrogazione è Nome, Nazione, data di nascita degli atleti che hanno vinto (PosizArrivo=1) più di 3 gare nella disciplina "atletica leggera" specialità "salto in alto"...

UFFA non rieco a capire come fare!!!

storr
09-01-2007, 16:49
Guarda, ad occhio non credo si possa fare per come la hai spiegata tu.
Ti spiego.
Servirebbe un a query che metta in join le tre tabelle, ma la cosa non è possibile in quanto mancano proprio le condizioni di join; in pratica le tre tabelle dovrebbero avere almeno un campo in comune su cui impostare la condizione di join ma da come l'hai descritta tu tra i campi della tabella
ATLETI (CodFisc , Nome, Nazione, DataNas) e
GARE (CodGara,Specialità,Disciplina, Data, Sede)
non c'è un campo comune su cui impostare la condizione di join.
Poi non si capisce il campo ATLETA della tabella PARTECIPA a quale attributo dell'ATLETA si riferisca (CodFisc , Nome) ?????

Ciao

ingpeo
09-01-2007, 18:36
Select ATLETI.Nome, ATLETI.Nazione, ATLETI.DataNasc
FROM
ATLETI
INNER JOIN
(SELECT COUNT(PARTECIPA.Atleta) AS C_atleta, PARTECIPA.Atleta
FROM GARE
INNER JOIN
PARTECIPA
ON (PARTECIPA.Gara=GARE.CodGara)
WHERE (GARE.Specialità='salto in alto' AND GARE.PosArrivo=1)
GROUP BY PARTECIPA.Atleta)
AS JOIN1
ON ATLETI.CodFisc=JOIN1.Atleta
WHERE (JOIN1.C_atleta>3)

Qualcosa del genere? :stordita:

nightwolf
09-01-2007, 21:18
Anche cosi magari? :)

SELECT ATLETI.Nome,ATLETI.Nazione,ATLETI.DataNas
FROM ATLETI,GARE,PARTECIPA
WHERE ATLETI.CodFisc=PARTECIPA.Atleta AND GARE.CodGara=PARTECIPA.Gara AND PARTECIPA.PosizArrivo=1 AND GARE.Disciplina='atletica leggera' AND GARE.Specialità='salto in alto'
GROUP BY ATLETI.Nome,ATLETI.Nazione,ATLETI.DataNas
HAVING COUNT(*)>3

ingpeo
09-01-2007, 21:28
Alla fine le condizioni e la tripla join c'è sempre.
A me non piace usare il COUNT (*) e non l'ho mai usato nella clausola HAVING.
Poi non è che io sia sto gran esperto, anzi....

guldo76
10-01-2007, 00:12
io in generale (SQL-2) farei così:
select A.Nome, A.Nazione, A.DataNas
from ATLETI A
inner join PARTECIPA P
inner join GARE G
on P.Gara = G.CodGara
on A.CodFisc = P.Atleta
where G.Disciplina = 'atletica leggera'
and G.Specialità = 'salto in alto'
and P.PosizArrivo = 1
group by A.Nome, A.Nazione, A.DataNas
having count(P.PosizArrivo) > 3;
Poi dipende chi deve interpretare questo. Se è access, segui la strada di ingpeo; se è oracle, nightwolf. (su oracle 8 non c'è la clausola join; sulle successive forse sì...)

giannola
10-01-2007, 10:18
sezione sbagliata

cerbert
10-01-2007, 10:31
spostata in "programmazione".
;)

giannimesa
17-11-2007, 01:28
anche se con estremo ritardo.. grazie mille ragazzi... ;) :D :D :p