webForumDet fria alternativet

Problem med sql-sökning

6 svar · 502 visningar · startad av saw

sawMedlem sedan mars 20011 880 inlägg
#1

Jag har tre tabeller inblandade här:
t_person, innehåller mest persondata
t_utb, innehåller div utbildningar
t_allaUtb innehåller id ifrån de övriga tabellerna samt en klart(ja/nej)

Jag vill använda detta så här, via en checkBoxList, så läser jag in alla
utbildningar och kryssar för de utbildningar jag vill ha.
Därefter så via en knapp, söker jag efter personer som har dessa utbildningar.
Mitt problem, jag får inte ihop det om jag söker efter flera utbildningar trots
att jag vet att det finns.

SELECT 
t_person.personId, 
t_person.anstNr, 
t_person.namn, 
t_person.mobil,
 t_utb.utb
FROM 
t_utb 
INNER JOIN 
(t_person 
INNER JOIN 
t_allaUtb
 AND
t_person.personId = t_allaUtb.personId) 
AND 
t_utb.utbId = t_allaUtb.utbId
WHERE 
t_utb.utb="Fönsterputs"
 AND 
t_utb.utb="Golvskötsel"
 AND 
t_utb.utb="Grundutbildning Städ"
 AND 
t_utb.utb="Körkort"
ORDER BY t_person.namn;

Jag vet som sagt att de finns men när jag söker med AND då får jag inga svar,
ändrar jag till OR då får jag svar.
Vad gör jag för fel? :q

ercizMedlem sedan maj 20011 826 inlägg
#2

Vad har t_utb.utb för datatyp egentligen? Den kan väl inte ha flera olika värden samtidigt? Det är ju det du förutsätter i din fråga.

Peter SMedlem sedan dec. 20025 483 inlägg
#3
select
    t_person.personId, 
    t_person.anstNr, 
    t_person.namn, 
    t_person.mobil
from
    t_person
where
    exists ( select 1 from 
            t_allautb inner join t_utb on t_allautb.utbid = t_utb.utbid 
            where t_allautb.personid = t_person.personid and t_utb.utb = 'Fönsterputs' )
and exists ( select 1 from 
            t_allautb inner join t_utb on t_allautb.utbid = t_utb.utbid 
            where t_allautb.personid = t_person.personid and t_utb.utb = 'Golvskötsel' )
and exists ( select 1 from 
            t_allautb inner join t_utb on t_allautb.utbid = t_utb.utbid 
            where t_allautb.personid = t_person.personid and t_utb.utb = 'Grundutbildning Städ' )
and exists ( select 1 from 
            t_allautb inner join t_utb on t_allautb.utbid = t_utb.utbid 
            where t_allautb.personid = t_person.personid and t_utb.utb = 'Körkort' )
order by
    t_person.namn

Fältet utb behöver du inte ha med i select:en eftersom du redan vet vad det är.

sawMedlem sedan mars 20011 880 inlägg
#4

Ok detta såg ju ganska så avandcerat ut.. :OO.
Jag gjorde en ändring och ändrade 1 till *, man kanske vill ha flera stycken
med den utbildningen.

Den stora frågan är nu, hur man gör detta dynamiskt.
Jag tänker så här, om man inte har fyllt i några krav i checkBoxlisten dvs man
kan ta vilken som helst, alternativ man kanske bara har fyllt i ett eller tre
krav, hur fasen löser man sql:en då?
Jag antar att man får bygga upp en string efter checkBoxlistens item eller?
För övrigt tack för ditt förslag, som naturligtvis fungerade perfekt, men varför
fungerade inte min??? :q

sawMedlem sedan mars 20011 880 inlägg
#5

Jag har rensat och renodlat sql:n lite

SELECT t_person.personId, t_person.anstNr, t_person.namn, t_person.mobil
FROM t_person
WHERE   Exists
(select * from 
t_allautb inner join t_utb on t_allautb.utbid = t_utb.utbid 
where t_allautb.personid = t_person.personid and t_utb.utb = 'Fönsterputs' 
AND t_allaUtb.klar=true<>False ) 
AND Exists 
(select * from 
t_allautb inner join t_utb on t_allautb.utbid = t_utb.utbid 
where t_allautb.personid = t_person.personid and t_utb.utb = 'Golvskötsel' 
AND t_allaUtb.klar=true <>False) 
AND Exists 
(select * from   t_allautb inner join t_utb on t_allautb.utbid = t_utb.utbid 
where t_allautb.personid = t_person.personid and t_utb.utb = 'Grundutbildning Städ' 
AND t_allaUtb.klar=true<>False)
AND Exists 
(select* from  t_allautb inner join t_utb on t_allautb.utbid = t_utb.utbid 
where t_allautb.personid = t_person.personid and t_utb.utb = 'Körkort' 
AND t_allaUtb.klar=true<>False)
ORDER BY t_person.namn;

Har jag gjort bort mig?
Den tycks iallafall fungera i Access

Peter SMedlem sedan dec. 20025 483 inlägg
#6

Att byta från 1 till * har ingen betydelse; vi är inte intresserade av att hämta någon specifik kolumn, utan vill bara veta om personen i fråga har aktuell utbildning.

sawMedlem sedan mars 20011 880 inlägg
#7

Jodå, allting har löst sig, jag lyckades att göra sql:n dynamisk.
Tack för all hjälp.

126 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
123 ms — hämta tråd, inlägg och bilagor (db)