InsiderMedlem sedan jan. 20001 003 inlägg
Har lite problem med en SQL-sats...
I tabellen person finns det dubletter av id. Men för dessa dubletter finns bara ett namn. Så om det finns tre av id 999, så finns det tre namn.
Om man söker på dessa tre namn så ska detta id komma "upp". (999)
Men om man söker på två av namnen så ska INTE 999 komma med i selekteringen.
I tabellen map finns inga dubletter av id. Där ska i det här fallet id 999 selekteras.
Jag har testat med ett par satser, men de funkar inte...
Nedanstående innehåller en sträng; SQL2 som innehåller namn, separerade med OR. "Tom OR Bill OR Sam", eller helt enkelt "Tom" om bara ett namn är valt.
sql = "Select xkoord, ykoord from map where map.id in (select id from person where namn ='" & SQL2 & "')"
Nedanstående innehåller oxå SQL2 fast nu ser den ut så här: "'Tom' , 'Bill' , 'Sam'"
sql = "Select xkoord, ykoord from map where map.id in (select id from person where namn IN (" & SQL2 & "))"
Nån som förstår???
@ndersMedlem sedan juni 200026 914 inlägg
Vad menar du med fungerar inte?
Felmeddelande?
SQL-fråga nummer 2 känner jag igen, ;), och den bör fungera.
Mvh,
------------------
All your base are belong to me.
@ndersMedlem sedan juni 200026 914 inlägg
Nu har jag läst om tråden i VB-forumet, och denna, och inser att jag inte alls förstår vad du vill ha ut för resultat.
Är det så att du vill ha AND-villkor mellan namnen, eller vad?
Jag är helt förlorad (som vanligt, då. ;) )
Mvh,
------------------
All your base are belong to me.
InsiderMedlem sedan jan. 20001 003 inlägg
Så här ska programmet funka:
Man ska kunna söka på ett eller flera namn. När man gör så ska det visas på en karta var det finns personer som heter så. (hus)
Om man söker på flera personer så ska bara de hus där dessa personer bor visas. Alltså Söker man på 'Tom' och 'Bill' så ska bara de hus visas det det både bor en Tom och en Bill. Alltså betydligt färre hus än om man bara söker på 'Tom'.
I tabellen personer listas ALLA personer som bor i ALLA husen. Alltså dubletter av namn. (fins bara 4 olika namn typ, men ett par tusen hus)
Varje hus har ett Id.
I tabellen map finns inga dubletter av Id. Från denna tabell hämtas koordinater för huset.
@ndersMedlem sedan juni 200026 914 inlägg
Ok, i så fall skall du inte använda IN().
Den kommaseparerade lista som skickas antas ha OR mellan alla värden.
För att det skall bli som du vill måste din SQL-fråga byggas upp dynamiskt i ditt VB-program, och resultera i något sånt här:
sql = "Select xkoord, ykoord from map where map.id in (select id from person where namn ='Tom') and map.id in (select id from person where namn ='Bill') AND map.id in (select id from person where namn ='Sam')"
Det finns säkerligen enklare och bättre sätt att lösa det på, men detta är det enda fungerande sättet jag kan komma på för tillfället.
Mvh,
------------------
All your base are belong to me.
InsiderMedlem sedan jan. 20001 003 inlägg
Tack! Det funkar.
Helt suveränt!!!
:)