31. oktober 2005 - 10:18Der er
23 kommentarer og 1 løsning
Hjælp til query
Jeg har to tabeller.. en tabel med Studenter og en tabel med lande.
Studenter kan have flere lande tilknyttet.. de har land1, land2, land3, land4 og land5. Hvordan kan jeg i en select fange alle lande. Jeg har selv følgende query som fanger et land fra lande tabellen:
SELECT TOP 1 [country_name], person.* FROM [TBL_Student] person INNER JOIN [tbl_country] country ON country.country_id = person.country_id
SELECT person.id,person.name,country.name FROM [TBL_Student] person INNER JOIN [tbl_country] country ON country.country_id = person.country_id ORDER BY person.id
jeg er ikke helt sikker på hvad der er smartest, men jeg kan ikke se at jeg behøver flere tabeller. Jeg har to tabeller nu. En student har FAST 5 lande tilknyttet:
Det kan du heller ikke, men det er den "korrekte" måde at modellerer det på, hvilket du selvfølgeligt ikke umiddelbart kan bruge noget noget som det står nu.
Du kan prøve følgende, jeg kan kun advarer mod at bruge det, men her er en mulighed (ved ikke om den fungerer i MS SQL med giv det et forsøg:
select id, navn, adresse, (select land_navn from tbl_country where land_id = land_1) as land1_text, ..... from tbl_student where ....
Hvad mener du de skal søge på? en studerende som er tilknyttet både england og tyskland? en studerende som er tilknyettet england eller tyskland? En studerende som har england som 1. land, og tyskland som 2. land. Vi kan kun gætte, hvis du ikke præcist forklarer hvad det skal være.
nej nej der er ingen prioritet eller rækkefølge. det er meget simpelt. jeg skal bare udtrække alle studenter af databasen som har FEKS. SELECT * FROM [TBL_Student] WHERE [land_1] = 'england' AND [land_2] = 'tyskland'
Synes godt om
Slettet bruger
31. oktober 2005 - 14:46#15
Er det muligt for dig at have landene som id eller bliver de indtastet som tekst i forbindelse med søgningen ?
Ok, hvis jeg har forstået dig korrekt, så må det blive sådan ca. (tabelle som i 31/10-2005 12:10:13)
select navn from tbl_student,stud_country where tbl_student.id=stud_country.stud_id and stud_country.country_id > all (select land_id from tbl_country where land_navn in ('England','Tyskland'))
kryptos> de indtastes som landenavne i forbindelse med søgning men har som sagt et id i databasen.
erik> jeg fatter bare ikke at jeg er nødt til at have den 3. database.. kan man ikke lave noget nested select:
SELECT * FROM [TBL_Student] WHERE [land_1] = (SELECT land_navn from tbl_country where land_id = 2) AND [land_2] = (SELECT land_navn from tbl_country where land_id = 4)
eller noget endnu smartere.. jeg kan ikke overskue at skulle lave en ekstra tabel.. :D så er det nedern at være programmør
Det er sjovt at være programmør, hvis man gør det rigtigt ;)
Nej, det er uholdbart, det du prøver på. Syn's jeg. Tag et kursus i database-teori en gang.
Tænk på at "England" kan stå både i land_1, land_2, land_3, land_4 og i land_5, og tilsvarende med "Tyskland" (eller koderne for dem). Hvis du siger, at det er ligegyldigt hvor de står, så får du en megastor sql-sætning. Og en helt anden sql-sætning hvis der skal søges på 3 navne. Du får ikke mig til at bøvle med det ;)
Et alternativ er at læse det hele ind med det bagvedliggende programmeringssprog, og så klare det dér. Det er i hvert fald OK, hvis der ikke er alt for mange data.
Synes godt om
Slettet bruger
31. oktober 2005 - 17:39#20
Gør hvad Erik har forslået det er det eneste der holder i længden, når der ikke er rækkefølge eller andre regler der kan forsvarer at de skal "sidde" direkte på den studerende.
jeg tror i misforstår.. det er kun i søgningen at rækkefølge som udgangspunkt er ligegyldig.. fordi jeg godt selv kan sortere mine datatables mv. De fem lande som en student har er ikke tilfældige.
Ok, jeg giver op. Det har taget næsten 8 timer før spørgeren (måske) nærmer sig at stille spørgsmålet nogenlunde præcist. Jeg har ikke tålomodighed til mere.
erikj > jeg er ked af hvis jeg har spildt din/jeres tid, men jeg har oponeret imod en ekstra tabel lige fra starten. hvis jeg ikke spørger ordentlig er det for jeg ikke er så stærk i sql. Jeg har lavet en midlertidig løsning hvor jeg tager mig af det hele i koden med at oversætte lande id'er til lande navne. Ikke den løsning jeg ønskede men det bedste jeg kunne komme op med inden for rimelig tid.
bedste løsning var at lave et view og selecte derfra.. man skal sikre sig at man har forstået spørgsmålet. det er svært at spørge ordentlig når man ikke ved noget om det man spørger om :D
Synes godt om
Ny brugerNybegynder
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.