Avatar billede cygnet Praktikant
06. november 2012 - 18:05 Der er 9 kommentarer og
1 løsning

Søgning på flere farver

Hejsa,

Jeg har en table med produktnumre

Tabel: Produkt
Felt: Produktnummer - Produktnavn
Data:
100 - Blå
200 - Blå/Gul
300 - Gul

Så har jeg en table med farver til disse produkter

Table: Attribut
Felt: AttributId, AttributNavn, Produkt
Data:
1 - Blå - 100
2 - Blå - 200
3 - Gul - 200
4 - Gul - 300
5 - Small - 100
4 - Large - 200
4 - XLarge - 300

Jeg vil så gerne lave et sql kald der finder hvilken produkter som er både blå og gul. Hvordan gør jeg dette? Det skal gerne være ret fleksibelt, da der vil være mange forskellige attributter ud over farve, f.eks. størrelse.

Ville jo være let nok med én farve, men skal gerne kunne søge på flere.

Udgangspunktet er lige nu dette:

Select * from Produkt, Attribut where Attribut.Produkt = Produkt.Produktnummer and AttributId = 1

På forhånd tak for hjælpen.
Avatar billede magic-mouse Novice
06. november 2012 - 18:57 #1
SELECT * FROM Produkt WHERE Produktnummer IN (SELECT Produkt FROM Attribut WHERE AttributId = 1)

Det skulle virke i MSSQL men ved ikke om der er den store forskæl i Access.
Avatar billede terry Ekspert
06. november 2012 - 19:10 #2
Not sure I agree on your table design so I'm going to use the

AttributNavn instead of AttributId.

SELECT Produkt.Produktnummer, Produkt.Produktnavn, Attribut.AttributId, Attribut.AttributNavn, Attribut.AttributNavn, Attribut_1.AttributNavn
FROM (Produkt INNER JOIN Attribut ON Produkt.Produktnummer = Attribut.Produkt) INNER JOIN Attribut AS Attribut_1 ON Attribut.Produkt = Attribut_1.Produkt
WHERE (((Attribut.AttributNavn)="Blå") AND ((Attribut_1.AttributNavn)="Gul"));
Avatar billede terry Ekspert
06. november 2012 - 19:11 #3
and that was an answer
Avatar billede terry Ekspert
06. november 2012 - 19:15 #4
not quite as long, result is the same though

SELECT Produkt.Produktnummer, Produkt.Produktnavn
FROM (Produkt INNER JOIN Attribut ON Produkt.Produktnummer = Attribut.Produkt) INNER JOIN Attribut AS Attribut_1 ON Attribut.Produkt = Attribut_1.Produkt
WHERE (((Attribut.AttributNavn)="Blå") AND ((Attribut_1.AttributNavn)="Gul"));
Avatar billede terry Ekspert
06. november 2012 - 19:25 #5
You could also find productnummer directly from Attribut table

SELECT Attribut.Produkt
FROM Attribut
WHERE (((Attribut.AttributNavn) In ("Blå","Gul")))
GROUP BY Attribut.Produkt
HAVING count(*) = 2;
Avatar billede terry Ekspert
06. november 2012 - 19:27 #6
so you could combine that with

SELECT * from Produkt WHERE Produktnummer IN (SELECT Attribut.Produkt
FROM Attribut
WHERE (((Attribut.AttributNavn) In ("Blå","Gul")))
GROUP BY Attribut.Produkt
HAVING count(*) = 2)
Avatar billede terry Ekspert
07. november 2012 - 17:47 #7
how about a little feedback?
Avatar billede terry Ekspert
13. november 2012 - 19:47 #8
cygnet you should have a little respect for people who use ther own time to try and help others.

If we took as long to place an answer then there would be  little use for eksperten

We cant help unless you give some feedback!
Avatar billede cygnet Praktikant
21. november 2012 - 18:18 #9
It worked perfectly with the "group by" and HAVING count(*) = 2)

Thanks.
Avatar billede terry Ekspert
21. november 2012 - 18:58 #10
Thank you too
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester