Avatar billede stonejunkie Nybegynder
09. maj 2007 - 21:19 Der er 12 kommentarer og
3 løsninger

left join

Jeg har et spørgsmål om hvordan jeg får sammensat den rette SQL sætning.

Jeg har følgende tre tabeller: fotos(id, filename), sider(id, side) og fotosSider(id, fotoId, sideId). Når et foto bliver tilføjet en side så vil et record i fotosSider blive oprettet med henholdsvis et fotoId og sideId.

Jeg vil gerne lave et udtræk hvor jeg får alle fotos og samtidig information om de er tilknyttet en bestemt side. Det skal siges at et foto godt kan være tilknyttet flere sider.

Jeg har selv prøvet med denne sætning:
SELECT fotos.filename as filename, fotosSider.sideId FROM fotos LEFT JOIN fotosSider ON fotos.id = fotosSider.fotoId

Problemet er bare at jeg med dette SQL sætning får dobbelt record for de fotos som går igen på flere sider.

Jeg håber at dette er tilstrækkelig information. hvis ikke så skriv endelig.

På forhånd tak for hjælpen.
Avatar billede Karsten Petersen Nybegynder
09. maj 2007 - 23:33 #1
Har du prøvet med en RIGHT JOIN i stedet?
Avatar billede stonejunkie Nybegynder
10. maj 2007 - 08:59 #2
Med RIGHT JOIN vil jeg vel kun få de fotos der er tilknyttet en side? Og dermed ikke få de fotos der endnu ikke er tilknyttet en side?
Avatar billede Karsten Petersen Nybegynder
10. maj 2007 - 22:02 #3
Undskyld, jeg havde ikke læst dit spørgsmål ordentligt :-s
Avatar billede Karsten Petersen Nybegynder
10. maj 2007 - 22:24 #4
Så det du vil er at få at vide om et foto er tilknyttet en side, men ikke hvad siden er?
Hvis du samtidig vil vide hvad siden er, kan du da ikke undgå at få dobbeltgængere...

I dit recordset er der jo kun 2 felter, og der kan ikke gemmes flere værdier end 2 i dem. Altså er der nødt til at være flere records for det samme foto.

Du er muligvis nødt til at lave et recordset mere, som har alle fotos.
Du løber så det recordset igennem en for en, og viser resultatet fra det andet recordset hvor der er et match på fotoid.

Jeg ved ikke om det er noget der kan bruges...?
Avatar billede stonejunkie Nybegynder
11. maj 2007 - 08:43 #5
Tak for dit bud freak_dk, jeg har desværre først mulighed for at kigge på dit forslag efter weekenden, men vender jeg tilbage når jeg har prøvet dit forslag.
Avatar billede stonejunkie Nybegynder
16. maj 2007 - 16:45 #6
Det kan godt være at jeg misforstår dit løsningsforslag men jeg har jo recordsættet fotos(id, filename) hvor alle fotos optræder. Så har jeg recordsættet fotosSider(id, fotoId, sideId) som indeholder fotoId på alle de fotos der er tilknyttet en side.

Til dit første sprøgsmål: Så det jeg gerne vil vide er om et foto er tilknyttet en bestemt side med et kendt sideId.
Avatar billede Karsten Petersen Nybegynder
16. maj 2007 - 23:00 #7
OK, nu tror jeg det begynder at dæmre. Ja den er tricky.
... må lige lægge hjernen lidt i blød.
Jeg tror ikke det bare kan gøres med en join.
Er der mon andre der har et bud?

Det må ihvertfald kunne lade sig gøre...
Avatar billede Karsten Petersen Nybegynder
16. maj 2007 - 23:25 #8
Har du forresten set der er en GROUP BY du kan tilføje i dit SELECT-statement.

Din SQL-sætning kommer til at se nogenlunde sådan her ud:
SELECT fotos.filename as filename, fotosSider.sideId FROM fotos LEFT JOIN fotosSider ON fotos.id = fotosSider.fotoId GROUP BY filename

Jeg ved ikke om det virker, men prøv engang...
Avatar billede kjulius Novice
16. maj 2007 - 23:33 #9
Måske sådan her?

SELECT fotos.filename as filename, fotosSider.sideId
FROM fotos
LEFT JOIN (
  SELECT fotoSider.fotoId, fotosSider.sideId, Sider.Side
  FROM fotosSider
  INNER JOIN Sider ON fotosSider.SideId = Sider.Id
) AS Tmp ON fotos.id = Tmp.fotoId
WHERE Tmp.Side IS NULL OR Tmp.Side = 10

(ikke testet)
Avatar billede kjulius Novice
02. august 2007 - 17:58 #10
--> stonejunkie: Har du fået det til at virke (og hvordan)?
Avatar billede stonejunkie Nybegynder
05. december 2008 - 20:29 #11
Sorry at jeg ikke lige har fået fulgt op på spørgsmålet. Men jeg fik det ikke til at virke. Jeg droppede det.

Men freak_dk og kjulius smid endelig et svar så skal i begge få point, som tak for jeres indsats.
Avatar billede Karsten Petersen Nybegynder
05. december 2008 - 21:34 #12
ærgeæææÆÆæ
Avatar billede Karsten Petersen Nybegynder
05. december 2008 - 21:35 #13
Ups! Ville bare sige, at det var ærgeligt du ikke fik det til at virke....
Avatar billede kjulius Novice
05. december 2008 - 22:24 #14
.
Avatar billede stonejunkie Nybegynder
06. december 2008 - 12:20 #15
Takker for jeres indsats.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester