Results 1 to 14 of 14

Thread: Outer join met drie tabellen

  1. #1

    Post Outer join met drie tabellen

    Yo Delphiërs,

    Ik heb een probleempje met het selecteren van data uit twee (eigenlijk) drie tabellen. Ik wil één query maken, waarin alle data staat uit de twee (lees drie) tabellen. De where statement is er goed voor. Alleen... Als er nu velden leeg zijn, die ik als leeg wil laten zien? Of te wel alleen data uit de ene tabel laten zien als de koppeling niet bestaat.

    Tabel 1: [Artiest]
    | ID | ArtiestNaam |


    Tabel 2: [CD]
    | ID | CDNaam | ArtiestID |

    Om alle artiesten te laten zien met hun cd's, staat er in de wherestatement:
    where CD.ArtiestID = Artiest.Id

    Als een artiest geen cd's heeft wordt deze artiest ook niet weer gegeven. Dat wil ik eigenlijk laten zien...

    Iemand die hierop iets weet?

    Falcon

  2. #2
    TCrapCodeProducer JackBigMac's Avatar
    Join Date
    May 2002
    Location
    Rotterdam
    Posts
    1,293
    Artiest laten zien, terwijl hij geen cd's heeft:

    select * from artiest a
    left outer join cd c on a.artiestid = c.artiestid

    Grtn,
    JackBigMac.
    It is in change that we find purpose.

  3. #3
    Yes Thanks,

    Maar nu wordt het iets moeilijker. tabelletje drie komt erbij...

    Bijvoorbeeld:

    Tabel 3: [Website]
    | ID | URL |

    in tabel 2 uitgebreid met:

    Tabel 2: [CD]
    | ID | CDNaam | ArtiestID | WebsiteID |

    Dus:

    select * from artiest a
    left outer join cd c on a.artiestid = c.artiestid
    , b.URL where b.ID = c.Website.ID

    Zodra de komma wordt toegevoegd, herkent Delphi de join niet meer...

    Falcon

  4. #4
    Old Navigator Matthijs's Avatar
    Join Date
    Mar 2001
    Location
    Ede, NL. Delphi: Delphi 7/2005 :). Matthijs schrijf je Matthijs
    Posts
    2,199
    Originally posted by Falcon
    Maar nu wordt het iets moeilijker. tabelletje drie komt erbij...
    select a.*, c.naam, b.url from artiest a
    left outer join cd c on a.artiestid = c.artiestid
    left outer join tabelb b on b.ID = c.Website.ID
    What's in a sig?

    Would my posting be less valuable if it didnot have a sig? (Vrij naar William S.)

    Let op de kleine lettertjes. For all postings: e&oe!
    This program performed an illegal function, the police are on their way

  5. #5
    Senior Member
    Join Date
    Nov 2002
    Location
    Meteren, gelderland
    Posts
    126
    Maar nu word het nog iets moeilijker:

    Tabel 1: [Artiest]
    | ID | ArtiestNaam |


    Tabel 2: [CD]
    | ID | CDNaam | ArtiestID | Datum |

    Ik wil alleen CD's zien die dit jaar zijn uitgebracht maar alle artiesten moeten worden getoond.

    SELECT a.*, c.naam
    FROM artiest a
    LEFT OUTER JOIN cd c ON a.artiestid = c.artiestid
    WHERE c.datum >= #01-01-2003#

    Hiermee krijg ik alleen artiesten terug die dit jaar een cd hebben uitgebracht.

    Databse: MS Access
    Het beste is voor mij goed genoeg.

  6. #6
    Eeeh, stel je nou een vraag of bevestig je dat dit de bedoeling is?
    Marcel

  7. #7
    Senior Member
    Join Date
    Nov 2002
    Location
    Meteren, gelderland
    Posts
    126
    Het is een vraag: "Ik wil alleen CD's zien die dit jaar zijn uitgebracht maar alle artiesten moeten worden getoond."
    Het beste is voor mij goed genoeg.

  8. #8
    OK. Het is een beetje van je server afhankelijk, maar de meeste servers snappen dat als je c.datum >= #01-01-2003# in je JOIN statement opneemt i.p.v. in je WHERE statement. Dus:
    Code:
    SELECT a.*, c.naam
    FROM artiest a 
    LEFT OUTER JOIN cd c ON a.artiestid = c.artiestid AND c.datum >= #01-01-2003#
    Marcel

  9. #9
    Senior Member walterheck's Avatar
    Join Date
    Oct 2001
    Location
    Belo Horizonte, Brasil
    Posts
    4,212
    Ruik ik hier een huiswerkopdracht?

    Verder zie ik het nut van tabel 3 niet, aangezien het alleen een onnodige manier van opslaan van een url is, die ook bij tabel2 ingepland had kunnen worden
    Nee, de Romeinen spraken geen ISO-8859-1 LATIN

  10. #10
    Senior Member
    Join Date
    Nov 2002
    Location
    Meteren, gelderland
    Posts
    126
    Marcel,
    "Deze join-expressie wordt niet ondesteund" volgens access.

    walterheck,
    Dit is bepaald geen huiswerkopdracht. Tabel 3 wordt in mijn vraag helemaal niet gebruikt.

    Als er iemand nog even goed naar mijn vraag zou willen kijken, ik vind het best een interessante kwestie!

    Bij onderstaande query word de selectie van WHERE op het resultaat van de JOIN selectie uitgevoerd.

    SELECT a.*, c.naam
    FROM artiest a
    LEFT OUTER JOIN cd c ON a.artiestid = c.artiestid
    WHERE c.datum >= #01-01-2003#

    de WHERE selectie zou eigenlijk al voor de JOIN moeten worden toegepast. Ik heb aan subquery's gedacht, maar ook die verschijnen 'te laat' in het WHERE gedeelte.
    Het beste is voor mij goed genoeg.

  11. #11
    yup outer join kent access nog niet. Alleen inner join volgens mij.

  12. #12
    yup outer join kent access nog niet. Alleen inner join volgens mij.
    Tjonge ben ik blij dat ik een echte database mag gebruiken (IB)

    Corny,

    Ik heb 0 ervaring met access, maar ben toen ik me er grijs aan zat te ergeren ergens in access wel een visual query builder tegengekomen, waarmee je je selectie visueel kunt opbouwen.

    Mogelijk kun je daar eens naar kijken. Zoals met de meeste M$ tools zal dat geen efficiente SQL opleveren (waarschijnlijk 6 A4tjes vol SQL code ) maar het kan je wel een richting geven hoe je dit kunt oplossen.

    Overigens maakt het voor een speelgoed database niet zoveel uit waar je je code uitvoert (je hebt immers toch geen server), dus dit zou je denk ik ook aan de client kant kunnen filteren, door een filter op je dataset.

    Benno

  13. #13
    Dat lijkt me inderdaad ook best een optie: haal gewoon de data naar je programma en filter daar de onnodige data uit.
    Marcel

  14. #14
    Senior Member
    Join Date
    Nov 2002
    Location
    Meteren, gelderland
    Posts
    126
    Access kies je ook niet voor de lol hè!

    De query builder is ook een raadsel als ik het bekijk: ontwerpweergaven, wizzards, Ahhh!

    Ik zal 'es kijken of ik idd in m'n programma kan filteren.

    Bedankt mensen!
    Prettig weekeind!
    Het beste is voor mij goed genoeg.

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Similar Threads

  1. network connectie met Paradox tabellen
    By huub in forum Databases
    Replies: 7
    Last Post: 04-Jan-05, 08:33
  2. SELECT queries met 4 tabellen
    By DJD77 in forum Databases
    Replies: 12
    Last Post: 09-Aug-02, 15:54

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •