Avatar billede celinder Nybegynder
25. juli 2008 - 15:27 Der er 13 kommentarer og
1 løsning

Where tabel in

Er der nogen der kan forklare hvorfor min database ikke levere nogen resultater når jeg køre følgende:

"Select Software_ID,Software_Navn From Software WHERE Software_ID IN (SELECT OrderTrack.OrdrerTrack_Software FROM OrderTrack WHERE (OrdrerTrack_ID ='" + m + "'))"

Hvis jeg f.eks klipper den op sådan her:

SELECT OrderTrack.OrdrerTrack_Software FROM OrderTrack WHERE (OrdrerTrack_ID ='" + m + "')) Levere den data 1,2 for M = 38

Når jeg indsætter 1,2 i
Select Software_ID,Software_Navn From Software WHERE Software_ID IN (1,2) levere den fint resultater, som den bør:

Er det ikke tilladt det jeg gør ?
Avatar billede arne_v Ekspert
25. juli 2008 - 15:34 #1
Det vil jeg da mene er helt legalt.

Er Software.Software_ID og OrderTrack.OrdrerTrack_Software samme type ?
Avatar billede celinder Nybegynder
25. juli 2008 - 15:42 #2
Ja de er begge varchar(20) så jeg forstår det heller ikke.

Jeg har testet lidt mere:

Hvis:
'
SELECT OrderTrack.OrdrerTrack_Software FROM OrderTrack WHERE (OrdrerTrack_ID ='" + m + "'))

kun levere et resultat f.eks 2 så får jeg også et resultat af hele SQl strengen som jeg bør:

Ligesåsnart at strengen levere resultat 1,2 eller 1,3 eller 2,3 så får jeg intet resultat ud:
Avatar billede arne_v Ekspert
25. juli 2008 - 15:43 #3
Ups.

Hvis

SELECT OrderTrack.OrdrerTrack_Software FROM OrderTrack WHERE (OrdrerTrack_ID ='" + m + "'))

returnerer 2 raekker med:

'1'
'2'

saa skal det virke.

Hvis

SELECT OrderTrack.OrdrerTrack_Software FROM OrderTrack WHERE (OrdrerTrack_ID ='" + m + "'))

returnerer 1 raekke med:

'1,2'

saa skal det ikke virke.
Avatar billede celinder Nybegynder
25. juli 2008 - 15:46 #4
den levere 1 række, er det så mit database design der er skævt ?
Avatar billede celinder Nybegynder
25. juli 2008 - 15:57 #5
Eller hvordan løser jeg den er lidt kringlet synes jeg.

- og vil helst ikke lave 2 forespørgsler.
Avatar billede arne_v Ekspert
25. juli 2008 - 16:24 #6
Ja. Aldrig aldrig aldrig felter med kommaseparerede vaerdier.
Avatar billede arne_v Ekspert
25. juli 2008 - 16:29 #7
Maaske kan du fuske noget med:

WHERE CHARINDEX(',' + felt + ',', SELECT ',' + felt + ',' FROM ...) > 0
Avatar billede celinder Nybegynder
25. juli 2008 - 16:43 #8
kan ikke lige se hvordan jeg skal omdesigne min db så en order kan indeholde flere stykker software fra tabellen software uden at det bliver et felt der indeholder flere ID i ordrer fra tabellen software.

Jeg prøver lige dit forslag Arne_V
Avatar billede celinder Nybegynder
25. juli 2008 - 16:54 #9
puha den charindex streng kan jeg ikke lige finde ud af at kringle sammen i dette tilfælde: nogen der kan hjælpe ?
Avatar billede arne_v Ekspert
26. juli 2008 - 06:00 #10
Hvis du har en M:M relation skal du have en ekstra tabel til at linke.
Avatar billede arne_v Ekspert
26. juli 2008 - 06:02 #11
"Select Software_ID,Software_Navn From Software WHERE CHARINDEX(','+Software_ID+',',','+ (SELECT OrderTrack.OrdrerTrack_Software FROM OrderTrack WHERE OrdrerTrack_ID ='" + m + "')+',')>0"
Avatar billede celinder Nybegynder
11. august 2008 - 14:09 #12
Hej Arne

Jeg har været væk på ferie mm.

Jeg har lavet en ekstra tabel som du skriver og det virker nu....

Kommer du med svar så vi kan lukke ?
Avatar billede arne_v Ekspert
11. august 2008 - 14:51 #13
kommer her
Avatar billede arne_v Ekspert
30. august 2008 - 02:12 #14
så mangler du bare at acceptere svaret
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