sawMedlem sedan mars 20011 880 inlägg 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 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 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 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 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 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 Jodå, allting har löst sig, jag lyckades att göra sql:n dynamisk.
Tack för all hjälp.