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?