Avatar billede weiland Nybegynder
10. juni 2011 - 11:24 Der er 11 kommentarer

Finde poster med SQL

Jeg har et elementært problem med søgning i en database-tabel.
Lad os sige, at jeg har følgende tabel:

Tabelnavn: "PersonEgenskab"
Primær nøgle: "PersonEgenskabID"
Talfelt: "PersonID_FK"
Talfelt: "EgenskabID_FK"

Hvordan skrives en SQL, som kan finde de personer, som har en bestemt kombination af egenskaber.
For eksempel både "egenskab1" og "egenskab2"?
Avatar billede Frisorsaksen Nybegynder
10. juni 2011 - 11:33 #1
Du kan bruge LIKE  Søg efter sql LIKE
Avatar billede jensen363 Forsker
10. juni 2011 - 11:37 #2
Den er lidt tricky da jeg går ud fra, at du kin ønsker data returneret såfremt begge betingelser skal være opfyldt

Er det korrekt ???
Avatar billede Frisorsaksen Nybegynder
10. juni 2011 - 11:38 #3
Du kan også bruge IN .. læse her http://www.w3schools.com/sql/sql_in.asp
Avatar billede Frisorsaksen Nybegynder
10. juni 2011 - 11:51 #4
Nåååh jeg misforstood dit spørgsmål først.

Er det mysql eller oracle database du bruger. Det lader til du skal køre en loop.
Avatar billede fdata Forsker
10. juni 2011 - 12:16 #5
Hvis du kun vil måle op mod 2 egenskaber, kan du jo oprette 2 forespørgsler, der tjekker de to værdier, f.eks.:

SELECT PersonEgenskab.PersonID_FK
FROM PersonEgenskab
WHERE EgenskabID_FK=DinVærdi1;

SELECT PersonEgenskab.PersonID_FK
FROM PersonEgenskab
WHERE EgenskabID_FK=DinVærdi2;

Dem kan du så gemme som f.eks. Q_PersonEgenskab_1 og Q_PersonEgenskab_2 og så sætte dom op mod hinanden i en 3. forespørgsel:

SELECT Q_PersonEgenskab_1.PersonID_FK
FROM Q_PersonEgenskab_1 INNER JOIN Q_PersonEgenskab_2
ON Q_PersonEgenskab_1.PersonID_FK = Q_PersonEgenskab_2.PersonID_FK;

... men hvis du vil kunne måle op mod flere (end 2) egenskaber, skal du nok have programmeret lidt tungere skyts.
Avatar billede jensen363 Forsker
10. juni 2011 - 12:26 #6
Ikke testet

SELECT PersonEgenskab.PersonID_FK, PersonEgenskab.EgenskabID_FK, PersonEgenskab_1.EgenskabID_FK
FROM PersonEgenskab INNER JOIN PersonEgenskab AS PersonEgenskab_1 ON PersonEgenskab.PersonID_FK = PersonEgenskab_1.PersonID_FK
WHERE (((PersonEgenskab.EgenskabID_FK)="egenskab1") AND ((PersonEgenskab_1.EgenskabID_FK)="egenskab4"));
Avatar billede weiland Nybegynder
10. juni 2011 - 12:29 #7
@Frisorsaksen: Det er access
@jensen363: Det er korrekt. Det er kun de personer, som har begge egenskaber.
@fdata: Tak for dit bud. Og ja, ofte er der flere end 2 egenskaber i forespørgslen.
Avatar billede weiland Nybegynder
10. juni 2011 - 12:41 #8
@jensen363:
Sejt, det lader til at virke! :-)
Er der en elegant løsning, hvis man har flere end 2 egenskaber?
Avatar billede weiland Nybegynder
10. juni 2011 - 12:43 #9
(Jeg mener: hvis der er flere end 2 egenskaber i forespørgslen)
Avatar billede jensen363 Forsker
10. juni 2011 - 13:34 #10
Jeg ved ikke om den er særligt elegant, men den virker :-)

Jeg vil umiddelbart tro at metoden også virker med flere kriterier
Avatar billede fdata Forsker
10. juni 2011 - 22:02 #11
Øøøh, som jeg ser det, er #5 og #6 to udgaver af samme konstruktion. Du kan naturligvis tilføje flere forespørgsler; men det skal vel ske dynamisk på en eller anden måde.

Hvordan havde du forestillet dig at kalde din "sql"?
Hvordan vil du formidle hvor mange egenskaber, du vil måle på - og de aktuelle værdier?
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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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