if you use Access's query builder its just a case of dragging and dropping the tables into the query builder window and then dragging and dropping the primary key over to the foreign key field. Then right click on the thin line (relationship) and alter the realationship type to LEFT or RIGHT OUTER join.
imago-dei >> Jeg skal bruge Picture til andre tabeller end kun kategori. dvs. at min picture tabel kunne komme til at se således ud og at rækkerne med * er dem der skal udsøges når jeg skal finde billeder til mine kategorier :
Sunero jeg ved måske ikke helt hvad du mener... Prøv at forklar hvad alle kolonnerne indeholder af data. Er RefId en foreign key fra Kategori tabellen? Eller måske en reference til nøgler i forskellige tabeller?
Hvis det er det sidste vil jeg heller råde dig til at lave det om således at du i Picture tabellen har en kolonne for hver tabel, således at hvis tabellen du skal søge i er Kategori, så står der et tal i KatId kolonnen, og null i de andre kolonner med foreign keys.
Men prøv at give et mere komplet eksempel på dine tabeller hvis jeg har misforstået dig.
imago-dei >> Det er korrekt at RefId er reference til nøgler i forskellige tabeller, men det burde da kunne løses, når RefTable angiver hvilken tabel der refereres til. Jeg har måske en 10-12 tabeller hvortil der kan refereres, og det må da kunne laves uden at man skal oprette 10 nye felter i Picture-tabellen.
Hver gang jeg laver en select, bruger jeg kun en af tabellerne f.eks. kategori. Så det må være noget lignende dette der skal til :
SELECT kategori.Nave,Picture.PicId FROM kategori LEFT JOIN Picture ON kategori.KatId=Pic.RefId
Problemet er bare, at der godt kan være 2 eller flere ens RefId'er. Dette skal løses ved at kigge på RefTable som i mit eksempel skal være "Kategori"
Nej, igen er det lidt svært at sige da jeg ikke kender opbygningen af databasen og dens indhold. Ovenstående query joiner tabellerne picture og kategori hvor kategori.katid = pic.RefID _og_ henter alle rækker hvor katid er null. Hvis du vil have _alle_ kategorier må du nok lave en ny select, som henter alle kategorier og lave en UNION mellem de to resultater.
Jeg må indrømme at jeg tog lidt fejl før.. I en left outer join får du ALLE rækker i venstre tabel og kun de rækker som matcher i din join condition (kategori.KatId=Pic.RefId). Grunden til at du ikke får alle kategorier er where klausulen, som siger at den kun skal hente rækker hvor der er et billede til tabellen 'kategori'.
Prøv
SELECT kategori.Navn,Picture.PicId FROM kategori LEFT JOIN Picture ON Kategori.KatId=Picture.RefId WHERE Picture.RefTabe = 'kategori' OR Picture.RefTable IS NULL;
En left outer join tager alle rækker i venstre tabel og de rækker i højre tabel, som matcher på join kriteriet. Dvs. at der kan være rækker i venstre tabel (i dit tilfælde i kategori tabellen) som _ikke_ har tilsvarende rækker i billede tabellen. I de tilfælde hvor der ikke er billeder som hører til kategorien kommer der til at stå null i kolonnerne fra picture tabellen. Alle kolonner fra begge tabeller sættes sammen i join operationen. Select henter så de relevante rækker og kolonner bagefter.
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.