Avatar billede virus Nybegynder
06. maj 2003 - 11:16 Der er 15 kommentarer og
1 løsning

SQL JOIN problem

Jeg har 4 tabeller


tabel1
-id

tabel2
-id
-ref_tabel1_id

tabel3
-id
-ref_tabel2_id
-navn

tabel4
-id
-ref_tabel2_id
-type

Nu er det sådan at jeg gerne vil hive alle records ud fra alle 4 tabeller
der er kædet sammen med tabel1.id = 2

tabel1 er hoved tabellen.
tabel2 er kædet sammen med tabel1 via tabel1's id
tabel3 + tabel4 er kædet sammen med tabel2 via tabel2's id.

Jeg har leget lidt med inner samt left joins, men jeg kan simpelthen ikke få den til at lege med som jeg vil :)

Håber i nemt og hurtigt kan stikke et eksempel
Avatar billede virus Nybegynder
06. maj 2003 - 11:18 #1
Jeg vil lige sige at tabel3 og tabel4 altid har records med samme ID altså tabel3.id = tabel4.id
Avatar billede mm12010 Nybegynder
06. maj 2003 - 11:25 #2
"SELECT * FROM tabel1, tabel2, tabel3, tabel4 WHERE tabel1.id = 2 AND tabel2.ref_tabel1_id = tabel1.id AND tabel tabel3.ref_tabel2_id = tabel2.id AND tabel tabel4.ref_tabel2_id = tabel2.id"
Avatar billede haunted Nybegynder
06. maj 2003 - 11:26 #3
select *
from     tabel1 a,
    tabel2 b,
    tabel3 c,
    tabel4 d
where
a.id = 2
a.id = b.ref_tabel2_id
b.ref_tabel2_id = c.ref_tabel2_id
c.ref_tabel2_id = d.ref_tabel2_id
Avatar billede haunted Nybegynder
06. maj 2003 - 11:26 #4
nåh... ja okay der var jeg lidt langsom...
Avatar billede mm12010 Nybegynder
06. maj 2003 - 11:27 #5
"SELECT * FROM tabel1, tabel2, tabel3, tabel4 WHERE tabel1.id = 2 AND tabel2.ref_tabel1_id = tabel1.id AND tabel3.ref_tabel2_id = tabel2.id AND tabel4.ref_tabel2_id = tabel2.id"
Avatar billede eagleeye Praktikant
06. maj 2003 - 11:30 #6
Du kan lave JOIN på denne måde og med en WHERE på som vist:

SQL = "SELECT tabel4.type, Tabel3.navn FROM ((tabel1 LEFT JOIN Tabel2 ON tabel1.id = Tabel2.ref_tabel1_id) LEFT JOIN Tabel3 ON Tabel2.id = Tabel3.ref_tabel2_id) LEFT JOIN tabel4 ON Tabel2.id = tabel4.ref_tabel2_id WHERE tabel1.id =2;"
Avatar billede virus Nybegynder
06. maj 2003 - 11:45 #7
lol ser lige i min søvnighed jeg har smidt tabel ind instedet for table, anyway jeg tester lige :)

Dog er jeg mest ude efter at få eagleeye's til at virke da det bla. er joins jeg vil arbejde mere med i fremtiden og derfor manglede et udgangspunkt ala dette.
Avatar billede virus Nybegynder
06. maj 2003 - 11:49 #8
tabel satans jeg er træt, anyway eagleeye, dit eksempel giver mig 2 * records
Avatar billede virus Nybegynder
06. maj 2003 - 11:50 #9
Det skal siges at der kan være flere rows i tabel3 og tabel4 som reffer til tabel2's id
Avatar billede virus Nybegynder
06. maj 2003 - 11:57 #10
haunted, dit forslag laver samme "fejl" som eagleeye's, altså hiver 2 * records ud

til jer begge, har testet lidt, det ender med at der bliver hevet rowcount * rowcount ud, dvs hvis der er 2 rows der passer får jeg 4, 3 får jeg 9 osv
Avatar billede eagleeye Praktikant
06. maj 2003 - 12:01 #11
Ja du får X antal gange som der er records i tabel3...
Problemmet opstår fordi den vil lave alle kombinationer af tabel 3 og 4
Avatar billede virus Nybegynder
06. maj 2003 - 12:02 #12
Ja netop, hvordan undgår jeg det? Hvis det da er muligt :)
Avatar billede eagleeye Praktikant
06. maj 2003 - 12:03 #13
Hvis din statement i kommentar 06/05-2003 11:18:40 passer at id altid i tabel 3 er lig med id i tabel 4  så tilføj en WHERE som her:


SELECT  tabel4.type, Tabel3.navn
FROM ((tabel1 LEFT JOIN Tabel2 ON tabel1.id = Tabel2.ref_tabel1_id) LEFT JOIN Tabel3 ON Tabel2.id = Tabel3.ref_tabel2_id) LEFT JOIN tabel4 ON Tabel2.id = tabel4.ref_tabel2_id
WHERE (((tabel1.id)=2)) and tabel3.id = tabel4.id;
Avatar billede eagleeye Praktikant
06. maj 2003 - 12:07 #14
Når man joner laves en ny tabel hver for hver join og ført JOINes tabel1 med tabel2 så JOINes tabel3 ind på det som giver en record for hver record i tabel3 som passer. Så JOINes tabel4 på den store tabel og der er jo et ID som passer for record der kom fra tabel 3, derfor får du tabel3*tabel4 poster.
Avatar billede virus Nybegynder
06. maj 2003 - 12:10 #15
Perfekt eagleeye
Nu skal jeg lige gennemtæske den så jeg ser logikken 110% :)
Takker igen
Avatar billede virus Nybegynder
06. maj 2003 - 12:12 #16
Tak for forklaringen også, det hjælper mig mere på vej :)
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
Kurser inden for grundlæggende programmering

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