Detta borde funka
select ID,UserID,StoreID from tbl tbl1
where (select count(distinct StoreID) from tbl tbl2 where tbl2.UserID=tbl1.UserID and StoreID in(25,27,28))=(select count(distinct StoreID) from tbl where StoreID in(25,27,28))
2 svar · 444 visningar · startad av Troxy
Det är alltid så svårt att sätta bra rubriker på trådar...
Nåväl, jag har en tabell där jag lagrar vilka användarbehörighet till olika butiker. Det är SQL Server det rör sig om.
Tabellen är enkel och ser ut såhär:
ID UserID StoreID
-------------------------
1 31 25
2 31 27
3 32 22
4 32 29
5 33 21
6 33 23
Här kan vi exempelvis se att användare nr. 31 har behörighet till butik nr. 25 och 27. Inga speciella konstigheter.
Men om vi nu säger att jag har ett gäng siffor, typ 25,27,28. Då vill jag kunna peta in dom siffrorna i en SQL-fråga och få reda på om en viss användare har behörighet till alla butiker vars ID finns bland dessa siffor.
Om vi tittar på exemplet ovan igen så har ju användare nr. 31 inte behörighet till butik nr. 28, då vill jag att resultatet ska bli tomt!
Men om användaren hade haft behörighet, så ska det skickas tillbaka något, vad spelar ingen roll, men resultatet ska inte bli tomt.
Jag hoppas någon förstår vad jag är ute efter...
Jag gissar på att lösningen har något att göra med "NOT IN" eller "NOT EXISTS" eller liknande.
Mycket tacksam för svar!
Detta borde funka
select ID,UserID,StoreID from tbl tbl1
where (select count(distinct StoreID) from tbl tbl2 where tbl2.UserID=tbl1.UserID and StoreID in(25,27,28))=(select count(distinct StoreID) from tbl where StoreID in(25,27,28))
Tack, jag fick till det utifrån den där SQL-frågan. :)