Avatar billede -thomas- Nybegynder
25. november 2004 - 15:35 Der er 10 kommentarer og
1 løsning

SQL problem

Jeg er gået lidt stå i en SQL-forespørgsel:

Jeg har følgende tabeller:

Tabel1:
ID
Navn

Relationer:
ID1
ID2

Tabel2:
ID
Navn


Enhver post i tabel1 skal kunne kædes sammen med en eller flere poster i tabel2 og omvendt vha. tabellen Relationer.

Jeg prøver at lave en forespørgsel, som henter alle records ud af Tabel1 (men kun én gang) samtidig med at jeg får felterne ID1 og ID2 fra Relationer, så jeg kan tjekke om de refererer til en bestemt record i Tabel2. Det kunne f.eks. være en tabel med fornavne og en med efternavne, hvor hver person kunne have både flere for- og efternavne, og hvor jeg skal hente alle personer ud og tjekke om de har et bestemt efternavn.

Jeg har forsøgt med:

SELECT ID, navn, ID1, ID2 FROM tabel1 LEFT JOIN relationer ON tabel1.ID = relationer.ID1

men denne henter samme record ud fra tabel1 flere gange, hvis denne har flere referencer fra tabel2.

Er der nogen der har et bud på hvordan dette løses?
Avatar billede arne_v Ekspert
25. november 2004 - 15:38 #1
Du skal vel have 2 ON, når du har 2 joins !?
Avatar billede -thomas- Nybegynder
25. november 2004 - 15:39 #2
Jeg behøver ikke 2 joins - jeg skal ikke hente data fra tabel2 - bare vide om der er en reference mellem de to tabeller vha. ID1 og ID2.
Avatar billede arne_v Ekspert
25. november 2004 - 15:40 #3
SELECT *
FROM (tabel1 LEFT JOIN relationer ON tabel1.ID = relationer.ID1)
LEFT JOIN tabel2 ON relationer.ID2=tabel2.ID
WHERE tabel2.Navn = 'xxxx'
Avatar billede arne_v Ekspert
25. november 2004 - 15:41 #4
SELECT *
FROM tabel1 LEFT JOIN relationer ON tabel1.ID = relationer.ID1
WHERE relationer.ID2 = Y
Avatar billede arne_v Ekspert
25. november 2004 - 15:41 #5
Alt efter om du kender navn eller id fra tabel2
Avatar billede -thomas- Nybegynder
25. november 2004 - 15:41 #6
Jeg har ID på en post i tabel2 - jeg vil tjekke alle poster igennem i tabel1 for relationer til denne post. Men uanset om der er relation eller ej, skal de med ud i svaret.
Avatar billede -thomas- Nybegynder
25. november 2004 - 15:43 #7
15:42:09 henter jo kun de poster ud som har en reference - jeg skal have alle poster ud af tabel1 samt ID1 og ID2 fra relationer.

Jeg har prøvet at tilføje:

SELECT *
FROM tabel1 LEFT JOIN relationer ON tabel1.ID = relationer.ID1
WHERE relationer.ID2 = Y OR
relationer.ID2 IS NULL

men relationer.ID2 kan jo også være andet en Y eller NULL.
Avatar billede arne_v Ekspert
25. november 2004 - 15:44 #8
SELECT *
FROM tabel1 LEFT JOIN relationer ON tabel1.ID = relationer.ID1 AND relationer.ID2 = Y

måske
Avatar billede arne_v Ekspert
25. november 2004 - 15:46 #9
men hvis du vil have flere tabel2.id2 ud for samme række i tabel1 så vil du altid
få duplikeret info fra tabel1
Avatar billede -thomas- Nybegynder
25. november 2004 - 15:47 #10
15:44:40 Det synes jeg ellers jeg har prøvet, men det ser nu ud til at virke. Tak for hjælpen!

15:46:49 Det ved jeg, men det behøver jeg heller ikke. Værdien i tabel2.id2 er fast i hver forespørgsel, så det er ikke relevant.

Mange tak for hjælpen - lægger du et svar?
Avatar billede arne_v Ekspert
25. november 2004 - 15:51 #11
ok
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

IT-JOB