Avatar billede webtouchdk Nybegynder
29. januar 2010 - 11:24 Der er 2 kommentarer og
1 løsning

Select fra mange-til-mange tabel (sub select eller join)

Jeg har en database med 2 tabeller - Bog og Forfatter.

Hver af disse tabeller har et ID og et navn.

f.eks. Bog:

|ID  |Navn 
|0    |Borte med blæsten
|1    |Harry Potter

eller forfatter:
|ID  |Navn 
|0    |Tolkien
|1    |Rowlins


En bog kan have flere forfattere, og en forfatter kan have skrevet flere bøger. Der er derfor oprettet en mange-til-mange tabel som knytter de 2 tabeller sammen - lad os kalde den BogForfatter. BogForfatter har har 2 kolonner (bog_id, forfatter_id).

Jeg vil nu gerne lave en SQL sætning der med udgangspunkt i et Bog id, kan give mig alle de bøger som som bogens forfattere også har skrevet.

Logikken er altså "giv mig alle de bøger som er skrevet af de forfattere der har skrevet bogen med id 234".

Jeg opnår resultatet med en sub select i stil med:
SELECT bog_id FROM BogForfatter WHERE forfatter_id ANY (SELECT forfatter_id WHERE bog_id = 234) - frit fra hukommelsen.

Problemet er bare at det performer imponerende langsomt (+5 sek. for næsten ingen rækker).

Spørgsmålet er derfor om jeg kan opnå det samme med en anden sætning, der f.eks. joiner på den samme tabel?
Avatar billede mireigi Novice
29. januar 2010 - 12:05 #1
Dette burde give dig det ønskede resultat. Det er dog IKKE testet.

SELECT
  BF1.bog_id
FROM
  BogForfatter AS BF1 INNER JOIN
      BogForfatter AS BF2 ON BF1.forfatter_id = BF2.forfatter_id
WHERE
  (BF2.bog_id = 234)
ORDER BY
  BF1.bog_id
Avatar billede webtouchdk Nybegynder
30. januar 2010 - 00:05 #2
Hmmm... havde jeg faktisk også lavet, men det viste sig at årsagen til at jeg ikke fik så mange svar var pga. fejl i data. Nå, men det skal jo ikke ligge dig til last for dit svar er jo rigtigt nok.
Avatar billede mireigi Novice
01. februar 2010 - 09:05 #3
Glad for at kunne hjælpe.

Håber du får rettet fejlene så det rent faktisk virker :)
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