Avatar billede kernelx Juniormester
24. juni 2005 - 14:28 Der er 11 kommentarer og
1 løsning

join med SQL og LIKE

Hi,
jeg har et stort problem:

i Table1 har jeg en table-overskrift som hedder: nr
i Table2 har jeg to table-overskrifter som hedder: nr og value

'nr' fra Table1 er fyldt med følgende data:
'1','2','3','4'

'nr' fra Table2 er fyldt med følgende data:
'11','22','33','44'

'value' fra Table2 er fyldt med følgende data:
'1-xyz', '2-xyz', '3-xyz', '4-xyz'

Nu passer 'nr' fra Table1 altid sammen med 'value' fra Table2.
Problemet er, at jeg vil lave en SELECT-commando, hvor jeg finder 'nr' fra Table2 og kun kender 'nr' fra Table1

altså noget i den stil (vilket nr fra Table2 passer til nr=1 fra Table1?):
SELECT Table2.nr FROM Table1, Table2 WHERE
Table1.nr='1' AND
Table2.value LIKE Table1.nr(???)'-%'

---
der må ikke bruges:
WHERE ...
Table2.value LIKE '1-%'

1 <- må kun bruges i:
WHERE Table1.nr='1'

er der en, som kender en løsning?


med venlig hilsen
KernelX
Avatar billede bromer Nybegynder
24. juni 2005 - 14:42 #1
Hvorfor sætter du restriktioner på, hvilke værktøjer der må bruges?
Avatar billede psv Nybegynder
24. juni 2005 - 14:51 #2
select *
from tabel1 t1
    inner join tabel2 t2 on (t1.nr = substring(t2.value, 1, charindex('-', value)-1))
Avatar billede kernelx Juniormester
27. juni 2005 - 10:24 #3
substring(x1,x2,x3)

x1 = table-overskrift
x2 = ???
x3 = ???
---
charindex(y1,y2)

y1 = tegn, som skal være grænse
y2 = ???
---

jeg har testet det, men det virker ikke.
jeg ved ikke sådan rigtigt, hvad vilke funktionsparameter betyder.
måske skal jeg ændre lidt rundt på dem for at det virker.

fejlmelding: ugyldig længde-parameter (length) blev brugt i substring-funktionen
---

med venlig hilsen
KernelX
Avatar billede psv Nybegynder
27. juni 2005 - 10:52 #4
Hmmm - virker perfekt i min testdatabase. Har du rækker i tabel2 som ikke har en '-' i value? :-)
Avatar billede kernelx Juniormester
27. juni 2005 - 11:01 #5
ja, det har jeg blandt andet også
Avatar billede psv Nybegynder
27. juni 2005 - 11:05 #6
prøv følgende så:

select *
from tabel1 t1
    inner join tabel2 t2 on ((charindex('-', value) > 0) and
                            (t1.nr = substring(t2.value, 1, charindex('-', value)-1)))
Avatar billede kernelx Juniormester
27. juni 2005 - 11:26 #7
det virker heller ikke. undskyld, jeg glemte at nævne, at ...
value godt kan indeholde flere '-'-tegn ... og nummeret, som kommer før det første '-'-tegn
kan godt være større in 9 ... det kan f.eks også være 12345 ... sådan at value så er:
12345-xyz-fgh
Avatar billede psv Nybegynder
27. juni 2005 - 11:32 #8
prøv lige om ikke denne SQL beregner rigtige substring fra value for dig:

select value, substring(value, 1, charindex('-', value)-1) as matchstr
from tabel2
Avatar billede kernelx Juniormester
27. juni 2005 - 13:00 #9
jeg ved ikke, hvad jeg laver forkert, men det virker ikke hos mig.
Mange tak for hjelpen alligevel
Avatar billede ldanielsen Nybegynder
28. juni 2005 - 14:00 #10
Du har problemerne fordi du har valgt et upraktisk design. Hvis to tabeller skal relatere til hinanden, så skal du have nogle kolonner der definerer og opretholder relationen. Det med "en del af en streng" vil nok kunne virke, men det vil meget hurtigt blive tungt at køre.
Avatar billede psv Nybegynder
28. juni 2005 - 14:35 #11
Jeg tænkte det samme - men når "like" er udelukket lugter det af en skoleopgave :-)
Avatar billede kernelx Juniormester
28. juni 2005 - 16:51 #12
sorry, det er ikke mit design! det er et design fra et programm, som bruger denne DB. Og denne DB vil jeg så have indflydelse på. Men de, som har lavet programmet har måske aldrig hørt noget om "normalformer" (sorry, ved ikke om det også hedder sådan på dansk).
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