Gå til innhold

Sql spørring med join som ikke returnerer hvor det er match


Anbefalte innlegg

Hei!

 

Vi holder på med et skoleprosjekt, og jeg prøver å lage et helt basic Achievement system til et spill vi lager. Jeg har følgende tabeller (Sånn ca, litt simplifisert for eksempelets skyld).

 

[userHasAchievements]

.UserID

.AchievementID

[userStatistics]

.UserID

.TroopsKilled

 

Så har jeg f.eks. et Achievement med ID 1 hvor man skal ha en større verdi enn 50 i TroopsKilled. Jeg ønsker da et Select statement som velger alle verdier fra UserStatistics som har TroopsKilled>50, men som ikke velger UserID'er som ikke allerede eksisterer i UserHasAchievements.

 

For eksempel dersom user 1, 2 og 3 oppfyller kravene, men 1 allerede ligger i UserHasAchievements med AchievementID 1, så ønsker jeg å få tilbake user ID 2 og 3.

 

Jeg har prøvd meg med noen joins, men det ser ikke helt ut til å føre frem.

 

Det nærmeste jeg har kommet er


SELECT UserStatistics.UserID
FROM UserStatistics
FULL OUTER JOIN UserHasAchievements
ON UserHasAchievements.UserID = UserStatistics.UserID
WHERE (UserStatistics.TroopsKilled >= 50)
AND (UserHasAchievements.AchievementID <> 1)
[/Code]

 

Men denne ekskluderer UserID'er som ikke finnes i UserHasAchievements i det hele tatt, og den inkluderer ID 1 dersom den har et Achievement med en annen ID.

 

FULL OUTER JOIN ser ikke ut til å gi helt det resultatet jeg forventet når jeg las om funksjonen på Wikipedia, syntes det var merkelig.

 

Alt gjøres selvfølgelig mer automatisert i applikasjonen, det er bare for å finne korrekt syntax for det jeg vil gjøre at det skjer med statiske tall.

 

Føler posten ble meget rotete, men håper det går an å forstå hva jeg mener.

Dersom noen kan hjelpe meg ville jeg være veldig takknemlig :)

Endret av Cemi
Lenke til kommentar
Videoannonse
Annonse

Tror jeg fant ut av det, relativt rett etter jeg postet her ;)

 

Koden var:

SELECT        UserID
FROM            UserStatistics
WHERE        (NOT EXISTS
                            (SELECT        UserID
                              FROM            UserHasAchievements
                              WHERE        (UserID = UserStatistics.UserID) AND (AchievementID = 1))) AND (TroopsKilled >= 50)

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...