---
title: "Problem med sql-sökning"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/183605-problem-med-sql-sökning"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "saw"
published: "2010-05-26T19:12:22.000Z"
updated: "2010-05-27T20:59:10.000Z"
replies: 6
views: 509
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/databaser-sql/183605-problem-med-sql-sökning"
---

# Problem med sql-sökning

## #1 — saw, 2010-05-26T19:12Z

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

Permalänk: https://www.webforum.nu/p/183605

## #2 — erciz, 2010-05-26T19:18Z

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.

Permalänk: https://www.webforum.nu/p/2235573

## #3 — Peter S, 2010-05-26T19:26Z

```
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.

Permalänk: https://www.webforum.nu/p/2235575

## #4 — saw, 2010-05-26T20:17Z

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

Permalänk: https://www.webforum.nu/p/2238683

## #5 — saw, 2010-05-27T18:10Z

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

Permalänk: https://www.webforum.nu/p/2238729

## #6 — Peter S, 2010-05-27T18:12Z

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.

Permalänk: https://www.webforum.nu/p/2238730

## #7 — saw, 2010-05-27T20:59Z

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

Permalänk: https://www.webforum.nu/p/2238742

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/183605-problem-med-sql-sökning
