Avatar billede nutman Nybegynder
10. januar 2006 - 22:39 Der er 2 kommentarer

Problem med selektiv JOIN

Ok, jeg har 2 tabeller med data i:

Tabel 1                Tabel 2 (Relationstabel)

ProduktID    ProduktNavn    ProduktID    ForhandlerID
---------------------------    ----------------------------
1        Produkt1    1        1
2        Produkt2

Jeg ønsker at lave en SQL sætning, hvor der returneres alle de produkter, som ikke allerede er relateret med Forhandler1 - dvs. Produkt2.
Og tro mig - jeg har forsøgt mig med tonsvis af JOINS, både LEFT, RIGHT, INNER og NATURAL, men har endnu ikke fundet løsningen. Jeg har stirret mig blind på det og er sikker på, at løsningen er ligefrem - jeg kan bare ikke se den.

Kan nogen hjælpe mig?

PS: Jeg bruger MySQL, så subselects kan ikke bruges.
Avatar billede arne_v Ekspert
10. januar 2006 - 22:47 #1
MySQL 4.1 og 5.0 har subselect

i ældre versioner:

SELECT *
FROM tabel1 LEFT JOIN tabel2 ON tabel1.produktid=tabel2.produktid
WHERE tabel2.produktid IS NULL
Avatar billede nutman Nybegynder
11. januar 2006 - 08:40 #2
Mjaeh, det er faktisk min oprindelige SQL-sætning, du nævner dér.
Så den virker altså ikke og her skal jeg forklare hvad der sker:

Tabellerne ser således ud:

Tabel 1                    Tabel 2 (Relationstabel)

ProduktID    ProduktNavn    ProduktID    ForhandlerID
------------------------    -------------------------
1            Produkt1      1            1
2            Produkt2

Men, bag kulisserne er der jo også en tabel, hvor ForhandlerID'et kommer fra:

Tabel 3

ForhandlerID    ForhandlerNavn
------------------------------
1              Forhandler1

Sagen er den, at bruger jeg ovenstående SQL-sætning, så får jeg kun listet de produkter, som ikke allerede ER relateret med en forhandler.
Meningen var jo, at den skulle liste ALLE produkter, som i forvejen IKKE var relateret med den valgte forhandler (jeg vælger først en forhandler fra en form på foregående side og overfører så værdien til næste side (<% forhandlerID = request.form("fID1") %>), hvor det så er meningen at jeg vil bruge fID1 til at vælge forhandleren og så fortælle SQL, at den skal fravælge alle de rækker (dvs. fravælge produkterne baseret på de rækker, hvor forhandlerID'et findes) i relationstabellen, hvor det valgte forhandlerID findes og derefter liste alle øvrige produkter.

Min SQL-sætning, baseret på dit forslag, ser således ud:

SQL = "SELECT * FROM produkter LEFT JOIN Forhandler_Produkt ON produkter.pID = Forhandler_Produkt.pID WHERE Forhandler_Produkt.fID IS NULL"

Men GAMLE SQL-sætning så således ud og giver samme resultat som dit forslag:

SQL = "SELECT * FROM produkter LEFT JOIN Forhandler_Produkt ON produkter.pID = Forhandler_Produkt.pID WHERE fID=" & forhandlerID & " IS NULL"
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