Vinnaren i pepparkakshustävlingen!
2016-05-20, 18:41
  #1
Medlem
KruxaNs avatar
Jag är väldigt ny av användandet av SQL så jag hoppas någon skulle kunna besvara enkelt för mig. Jag skulle använda en frågeoperation som letar efter en person med högsta resultat i en tävling, för detta har jag använt mig av nedanstående kod, tillsammans testat runt andra olika sett hur en korrekt lösning på problemet.

Kod:
select max(resultat), spelare.namn 
from speltillfalle, spelare 
where speltillfalle.namn="Masters";

Men när jag gör frågeoperationen får jag ut de högsta resultat, och det är det jag är ute efter. Men den ger mig även ett namn som inte ens är med i tävlingen "Masters.

Så hur ska jag göra för att få ut namnet som resultatet ansvarar för.
Citera
2016-05-20, 19:10
  #2
Medlem
whoozes avatar
Du måste binda ihop speltillfalle och spelare.

Googla JOIN

En variant är också att lägga till följande i WHERE
"spelare.speltillfalleID = speltillfalle.ID"

Då måste du också ha detta fält i spelare

Ja... Du förstår principen i alla fall?
Citera
2016-05-21, 12:07
  #3
Medlem
KruxaNs avatar
Tack, för ditt svar. Och jag kommit fram till följande kod som ger mig högsta resultatet, men jag kan inte begränsa koden till en viss tävling.

Kod:
select speltillfalle.resultat, spelare.namn from speltillfalle 
inner join spelare on speltillfalle.pnr = spelare.pnr 
where resultat=(select max(resultat) from speltillfalle);

Kod:
select speltillfalle.resultat, spelare.namn 
from speltillfalle 
inner join spelare on speltillfalle.pnr = spelare.pnr
where resultat=(select max(resultat) from speltillfalle) 
and speltillfalle.namn="Masters";

Men då ger inte databasen mig något tillbaka.
Citera
2016-05-22, 11:41
  #4
Medlem
Citat:
Ursprungligen postat av KruxaN
Tack, för ditt svar. Och jag kommit fram till följande kod som ger mig högsta resultatet, men jag kan inte begränsa koden till en viss tävling.

Kod:
select speltillfalle.resultat, spelare.namn from speltillfalle 
inner join spelare on speltillfalle.pnr = spelare.pnr 
where resultat=(select max(resultat) from speltillfalle);

Kod:
select speltillfalle.resultat, spelare.namn 
from speltillfalle 
inner join spelare on speltillfalle.pnr = spelare.pnr
where resultat=(select max(resultat) from speltillfalle) 
and speltillfalle.namn="Masters";

Men då ger inte databasen mig något tillbaka.


Prova left join istället för inner join?
Skall det verkligen vara "Masters"? Testa 'Masters'.

Själv hade jag nog gjort så här:
Kod:
Select max(speltillfalle.resultat), spelare.namn from
(Select * from speltillfalle where namn='Masters')speltillfalle
left join
(Select * from spelare)spelare
on speltillfalle.pnr=spelare.pnr
Citera
2016-05-22, 13:01
  #5
Medlem
Citat:
Ursprungligen postat av 12345666
Prova left join istället för inner join?
Skall det verkligen vara "Masters"? Testa 'Masters'.

Själv hade jag nog gjort så här:
Kod:
Fel


EDIT:
Så här:
Kod:
Select speltillfalle.resultat, spelare.namn from
(Select * from speltillfalle where namn='Masters' order by resultat desc)speltillfalle
left join
(Select * from spelare)spelare
on speltillfalle.pnr=spelare.pnr
where rownum=1
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback