Jag har en tabell med 2 fält, id och egenskap. Inget av fältet är unikt. SELECT DISTINCT id Förutsätter att kombinationen ID tillsamans med egenskap är unik. Ett id kan inte ha dubblet av en egenskap. Det där fungerade bra, TACK. För att få de med minst 2 av de tre kriterierna, byt ut HAVING Count(*)=3 mot HAVING Count(*)>=2. klockrent, och genom att byta ut antalet mot en variabel blir dynamiken fulländad.Knivig sqlsats - utsökning med flera villkor på samma fält
Nu vill jag få ALLA id som svarar upp till ALLA de egenskaper jag anger.
Ex
Jag söker långa, starka & blonda.
Tabellen
|--id--|--egenskap--|
| 1 | stark |
| 2 | lång |
| 1 | lång |
| 2 | blond |
| 1 | blond |
här vill jag ha 1 som svar, då 1 är både lång, stark och blond. 2 endast lång och blond
Hur skriver man en effektiv sqlsats för detta?Sv: Knivig sqlsats - utsökning med flera villkor på samma fält
FROM Tabellen
WHERE egenskap IN ('a','b','c')Sv: Knivig sqlsats - utsökning med flera villkor på samma fält
SELECT egenskaper.id
FROM egenskaper
WHERE egenskap In ("blond","lång","stark")
GROUP BY id
HAVING Count(*)=3;
tre står för antalet sökkriterier.
Du skulle kuna ta bort Having och istället sortera på antalet för att få den med flest matchande egenskaper:
SELECT TOP 1 id
FROM egenskaper
WHERE egenskap In ("blond","lång","stark")
GROUP BY id
ORDER BY Count(*) DESC, id;
Sv:Knivig sqlsats - utsökning med flera villkor på samma fält
Men om jag tex vill ha de med minst 2 av de tre kriterierna uppfyllda typ blonda, starka och sedan "vad som helst". Hur gör jag då? Frågan skall alltså vara dynamisk. Antingen kan man ange EXAKT villka egenskaper man vill eller bara någon.
Provade att lägga in ett % tecken i ett av de 3, men det fungerade inte så bra:-(Sv: Knivig sqlsats - utsökning med flera villkor på samma fält
Sv:Knivig sqlsats - utsökning med flera villkor på samma fält