Avatar billede bodekaer Nybegynder
24. januar 2001 - 22:01 Der er 26 kommentarer og
1 løsning

Søgning på flere kolonner med SQL

Jeg har en SQL kode der skal søge på en streng i to tabeller i en database.

den søger i tab1 og tab2 hvor der findes henholdsvis id1, kol1 og id2, kol2.

hvis den søger efter strengen \"hej\" i kol1 og kol2, og id1 = id2, altså hvis kol1 = \"hej\" og kol2 = \"hej\", så ville den normalt finde 2 poster, men SQL koden skal laves så den kun henter en.

F.eks.:

--------------------    --------------------
|  id1  |  kol1  |    |  id2  |  kol2  |
--------------------    --------------------
| michael |  hvor  |    |  per  |  hvad  |
|  jens  |  heja  |    | michael |  hej  |
|  per    |  hvem  |    |  jens  |  haja  |
--------------------    --------------------

Søgeningen efter stregen \"hej\" skulle så gerne resultere i at finde:

-----------
|  id    |
-----------
| michael | 
|  jens  | 
-----------

Kan nogen lave en sådanne SQL...?

Jeg kan komme med et lille eksempel... det virker dog ikke. :)


tabel1 as tab1,tabel2 as tab2 WHERE ( (instr(lcase(tab1.kol1),\'hej\')>0) or (instr(lcase(tab2.kol2),\'hej\')>0))

Håber i kan hjælpe?

Avatar billede lp Nybegynder
24. januar 2001 - 22:04 #1
med hvilken sql server, access, MS SQL, MySQL ????

det er egentlig ikke et asp spm, men hører hjemme i den pågældende kategori....
Avatar billede tdaugaard Nybegynder
24. januar 2001 - 22:06 #2
tabel1 as tab1,tabel2 as tab2 WHERE lcase(tab1.kol1) LIKE \'%hej%\' OR lcase(tab2.kol2) LIKE \'%hej%\'
Avatar billede dr_scoop Nybegynder
24. januar 2001 - 22:08 #3
Tdaugaards svar burde virke, men hvis det er i access, så skal du bytte % ud med *

tabel1 as tab1,tabel2 as tab2 WHERE lcase(tab1.kol1) LIKE \'*hej*\' OR lcase(tab2.kol2) LIKE \'*hej*\'

/Dr_scoop
Avatar billede lp Nybegynder
24. januar 2001 - 22:09 #4
he he, du modskriver egentlig lidt dine ønsker igennem din forklaring, først skriver du at den kun skal returnere 1 post, men senere beskriver du at den korrekte sql gerne skulle levere 2 poster, he he..........?!?!?!??
Avatar billede lp Nybegynder
24. januar 2001 - 22:10 #5
nej det kan du ikke...... * er IKKE wildcards i SQL.......heller ikke access....brug ALTID %
Avatar billede tdaugaard Nybegynder
24. januar 2001 - 22:13 #6
lp:> jeg mener at Access (som den eneste) godt kan tage * (asterisk) men at hvis du vil være sikker på kompatabilitet mellem databaser skal man bruge %.
Avatar billede lp Nybegynder
24. januar 2001 - 22:15 #7
hmmm, det må være noget nyt i access 2000 for det virkede ikke da jeg engang tilbage i oldtiden rodede med en access 97 db.........hmmmm, microsoft når det er værst!
Avatar billede tdaugaard Nybegynder
24. januar 2001 - 22:17 #8
lp:> ahh .. DET kan der være noget om .. jeg har altid brugt Access 2K såe ... :-)
Avatar billede lp Nybegynder
24. januar 2001 - 22:19 #9
jeg kan heller ikke finde noget dokumentation på dette, dog at access benytter # som enkelt-karakters wildcard fx: like \'Ny#\' som kan returnere Nyt, Nye etc, men ikke Nyhed.....andre databaser benytter _ således: like \'Ny_\'
Avatar billede bodekaer Nybegynder
24. januar 2001 - 22:19 #10
Det giver samme resultat.

Når jeg søger på f.eks. \"hvad\" får jeg \"michael\",\"jens\",\"per\" som resultat, altså de tre navne i tab1.

Meget mystisk!

Jeg bruger access, men det virker ikke med *???
Det virker lidt med %, men så laver den bare det underlige nummer... kunne den omformuleres på en anden måde?
Avatar billede tdaugaard Nybegynder
24. januar 2001 - 22:22 #11
Der er en lille fejl:

tabel1 as tab1,tabel2 as tab2 WHERE lcase(tab1.kol1) LIKE \'%hej%\' OR lcase(tab1.kol2) LIKE \'%hej%\'

jeg havde skrevet tab1.kol1 og tab2.kol2 ..
Avatar billede tdaugaard Nybegynder
24. januar 2001 - 22:23 #12
nææ  glem det! jeg er træt .. :-( der var ingen fejl!
Avatar billede lp Nybegynder
24. januar 2001 - 22:23 #13
hvilken db?

det kunne være man skulle prøve at joine dem.....?? nej jeg ved det sq ikke, det er umuligt at sætte sig ordentligt ind og jeg er da sikker på at tdau hjælper dig med denne, ik :-)
desuden skuffer du mig tdau.....tjek din icq og mine details.....så vil du forstå....:-)
Avatar billede tdaugaard Nybegynder
24. januar 2001 - 22:24 #14
Jeg tror du skal bruge noget JOIN stuff ...
Avatar billede tdaugaard Nybegynder
24. januar 2001 - 22:25 #15
lp:> Er det i dag du har fødselsdag ? JAMEN ET STORT TILLYKKE!!!!
Jeg er ikke på ICQ fordi jeg har aalt for meget at lave og aalt for lidt tid ..
Avatar billede lp Nybegynder
24. januar 2001 - 22:26 #16
select * from tabel1 t1 left join tabel2 t2 on t1.id1 = t2.id2 where lcase(t1.kol1) like \'%hej%\' or lcase(t1.kol2) like \'%hej%\'
Avatar billede lp Nybegynder
24. januar 2001 - 22:27 #17
he he, tak for det :-) det er ok - du er tilgivet :-)
Avatar billede lp Nybegynder
24. januar 2001 - 22:29 #18
bodekaer -> den er svinget lige ud fra ærmet, men jeg kan ikke se der er nogle fejl.....lcase() funktionen kan dog undgåes og er spildkode da du laver en like som er case insensitive....
Avatar billede tdaugaard Nybegynder
24. januar 2001 - 22:29 #19
lp:> *S* tak :-)
Avatar billede lp Nybegynder
24. januar 2001 - 22:31 #20
jeg er på vej videre, så jeg håber vi kan få denne lukket meget snart! ellers må den vente til senere eller i morgen!
Avatar billede bodekaer Nybegynder
25. januar 2001 - 16:26 #21
Jeg tror jeg er ved at finde en løsning.

Men en lille ting så, hvordan henter jeg så login fra tab2?

jeg ville tro:    rs(\"tab2.login\") ???

den melder fejl
Avatar billede tdaugaard Nybegynder
25. januar 2001 - 16:28 #22
Nej, bare RS(\"login\") når man JOIN\'er to tabeller så kommer \"output\" (recordsæt) ud som eet recordset
Avatar billede bodekaer Nybegynder
25. januar 2001 - 16:39 #23
Jamen jeg bruger LEFT JOIN og findes ikke alle login i tab1, lidt ligesom:

-----------------
| id1  |  id2  |
-----------------
| per  |  per  |
| mic  |        |
| hans |  hans  |
-----------------

og derfor får jeg ikke alle id\'erne med.... ???
Avatar billede tdaugaard Nybegynder
25. januar 2001 - 16:41 #24
hmm .. der skal du spørge LP .. jeg har ingen forstand på JOIN\'s
Avatar billede sbarnney Nybegynder
27. januar 2001 - 11:05 #25
Hvis jeg forstår jer ret, får bondekaer det til at virke. Men får bare for mange recordsets frem, kan det ikke løses med DISTINCT i hans SELECT komando ??

Stig
Avatar billede tdaugaard Nybegynder
27. januar 2001 - 13:22 #26
bondekaer *LOL* det er bodekaer .. men DISTINCT gør det ikke, da han får tre forskellige og ikke 3 eller færre ens.
Avatar billede bodekaer Nybegynder
28. januar 2001 - 15:30 #27
Vi har fundet en løsning, tak til jer alle, men lp bliver vinderen.

tag et smut forbi: www.bodekaer.dk / www.rezq.dk
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
Kurser inden for grundlæggende programmering

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