Avatar billede hoppe11 Nybegynder
18. marts 2010 - 16:21 Der er 7 kommentarer og
1 løsning

join table ud fra et felt i anden table

jeg er ved at være ude i noget lidt kryptisk hvor jeg skal lave en JOIN af en table ud fra hvad et andet felt indeholder

eks.

SELECT tbl.type
FROM tbl

vil så joine en table ud fra hvad tbl.type giver.. hvis tbl.type er et lige tal skal table "tbl_lige" joines og hvis det er ulige skal "tbl_ulige" joines, men hvordan!?

SELECT tbl.type
FROM tbl
LEFT JOIN tbl_lige ON tbl_lige.felt=tbl.felt
Avatar billede erikjacobsen Ekspert
18. marts 2010 - 16:47 #1
En lidt mystisk tabelstruktur - men hvis det er hvad du har, så noget i retning af

SELECT tbl.type
FROM tbl
LEFT JOIN tbl_lige ON tbl_lige.felt=tbl.felt  WHERE tbl.type MOD 2 = 0

UNION

SELECT tbl.type
FROM tbl
LEFT JOIN tbl_lige ON tbl_ulige.felt=tbl.felt  WHERE tbl.type MOD 2 <> 0
Avatar billede hoppe11 Nybegynder
18. marts 2010 - 17:36 #2
ja, den er lidt kryptisk.. prøver også at finde en bedre løsning

måske du kan hjælpe mig med strukturen? :)

er ved at lave et lille økonomisystem, og problemet ligger i modulerne (kredit, debit, lager osv)

pt har jeg en tabel med kontoer, en med posteringer og så en tabel med hvert modul

i princippet kunne jeg jo lægge alle moduler sammen i samme tabel hvilket også gør det hele lidt mere ligtil, men hvert modul har jo ikke de samme felter i tabellen og det er her det begynder at blive en smule kryptisk

her er et lille overblik over strukturen

accounting (postering)
-------------
id
account_id (konto)
accountoff_id (modkonto)
subaccount_id (modul underkonto)
subaccountoff_id (modul undermodkonto)
amount
...

account (konto)
----------------
id
att_module (attribut for en modulkonto)
name
...

module_1 (modul debitor)
-------------
id
name

module_2 (modul kreditor)
-------------
id
name

problemet bliver lidt når der kommer flere moduler på så indeholder de pludselig ikke de samme felter

subaccount_id og subaccountoff_id referer altid til et modul alt efter hvad att_module er..

att_module = 1 -> module_1
att_module = 2 -> module_2
Avatar billede erikjacobsen Ekspert
18. marts 2010 - 18:41 #3
Det med ulige/lige kan jeg ikke greje, men ellers er kunne du jo lægge det, der er fælles for modulerne i een tabel, og kun det der afviger i andre. Så får du vel ikke brug for den kryptiske select-sætning?
Avatar billede hoppe11 Nybegynder
18. marts 2010 - 18:47 #4
kan godt følge dig, men hvordan definerer man så hvor og hvornår man skal refererer til de ekstra felter/tabeller?
Avatar billede erikjacobsen Ekspert
18. marts 2010 - 19:01 #5
Du har et felt i den "fælles" tabel, der siger hvilken type det er. Man kan ikke bruge det til at joine på andre tabeller, men det har man jo heller ikke brug for.
Avatar billede hoppe11 Nybegynder
19. marts 2010 - 14:43 #6
hvad mener du med at heller ikke har brug for at joine?
Avatar billede erikjacobsen Ekspert
19. marts 2010 - 15:07 #7
Hvis du har de fælles ting i een tabel, har du ikke brug for at joine, hvis du kun skal bruge de fælles ting.

Har du brug for mere end de fælles ting, dvs. noget fra een af de andre tabeller, har du allerede valgt hvilken type det skal være og hvilken tabel, der skal joines med. Du skal ikke joine "ud fra hvad et andet felt indeholder".
Avatar billede hoppe11 Nybegynder
19. marts 2010 - 21:02 #8
ja, det er rigtigt nok..

tak for hjælpen :)
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