Avatar billede hrole Mester
20. januar 2013 - 16:09 Der er 5 kommentarer og
1 løsning

Sammenspil mellem to tabeller

Hej,

Jeg har følgende to tabeller:
beg:
a b c_start d e c_slut
1  34          80
1  22          99
1
2
3
3

og

beg_typer:
beg_id beg_opl
22    Anders
34    Finn
80    Bo
99    Preben

Der skal trækkes oplysninger ud for en bestemt a-værdi og koden i c_start og c_slut erstattes med en beg_opl. FX

1  Finn          Bo
1  Anders        Preben

Jeg kan ikke gennemskue hvordan queryen skal skrives - kan I hjælpe?
20. januar 2013 - 18:49 #1
Jeg vil gå ud fra en tabel beg med tre kolonner, a, c_start, og c_slut med i den første række værdierne 1, 34, og 80.  Er det korrekt opfattet?  Jeg forstår ikke hvad b, d, og e er.

Men ud fra den opfattelse skulle denne query give dig det søgte resultat hvor a = 1:

SELECT b.a, bt1.beg_opl, bt2.beg_opl
FROM beg b
JOIN beg_type bt1 ON b.c_start = bt1.beg_id
JOIN beg_type bt2 ON b.c_slut = bt2.beg_id
WHERE b.a = 1

Du vil bemærke, at jeg bruger beg_type tabellen to gange med forskellige alias'er.
Avatar billede hrole Mester
21. januar 2013 - 13:03 #2
Hej Christian_belgien,

Du har opfattet helt korrekt.

Jeg har dog lidt svært ved at gennemskue queryen.

Skulle b.a i SELECT og WHERE ikke være beg.a eller FROM beg AS b?

Kan du forklare én af JOIN sætningerne, dem forstår jeg ikke fuldstændigt.
21. januar 2013 - 15:53 #3
Jeg har givet tabellerne aliaser (øgenavne).  Det gør queryerne kortere og derfor, for mig, mere overskuelige.  Fordi jeg siger 'SELECT .... FROM beg b ...' kan jeg derefter referere til beg tabellen blot med b.  Nu gør det ikke så stor forskel her, fordi beg er et kort tabelnavn, men det jeg arbejder med i øjeblikket har lange tabelnavne såsom #__momentum_loancases.  Du kan skippe aliasen for beg, men fordi beg_type tabellen anvendes to gange er du nødt til at bruge aliaser der for at kunne skelne mellem de to anvendelser.

Så har du i beg to numeriske felter c_start og c_slut som du i resultatet hver især vil have erstattet med det tilsvarende beg_type navn.  Først joiner du beg med beg_type således at beg_type id'en svarer til beg c_start, og derefter joiner du beg med beg_type således at denne gang beg_type id'en svarer til beg c_slut.

Jeg har lavet en illustration som du kan se her:  http://christianjorgensen.be/Billeder/hrole.PNG .  Måske kan det lette på forståelsen.
Avatar billede hrole Mester
23. januar 2013 - 19:46 #4
Tak.

I phpmyadmin får jeg korrekt resultat hvis c_start og c_slut har en værdi, men ikke hvis de er tomme.
24. januar 2013 - 08:13 #5
Hvis c_start og c_slut kan være tomme, så brug LEFT JOIN i stedet for JOIN.

Jeg satte et par tabeller op med dine data og et par mere og lod en c_start og en c_slut værdi være tomme, og jeg fik dette resultat:

a beg_opl beg_opl
1  Finn    Bo
1  Anders  Preben
1  Jens    NULL
1  NULL    Finn
Avatar billede hrole Mester
24. januar 2013 - 10:06 #6
Tak for hjælpen, Christian_Belgien.
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