因此在數據庫中有一個名爲roles_users的表。這包含用戶擁有的所有角色。這裏有兩列:user_id,role_id。SQL:Where IN查詢
一個普通用戶,沒有額外的角色,在這個表中有1行。此行有role_id 1.
管理員用戶,在此表中有2行。一個與ROLE_ID 1,和一排與ROLE_ID 2
像這樣:
user_id role_id
88 1
88 2
99 1 // Only one row with that user_id, so he's a user
現在我試着去統計有多少用戶/管理/銷售商/合作伙伴存在。
賣家有3行,一個帶ROLE_ID 1,ROLE_ID 2和3 ROLE_ID
合作伙伴已經ROLE_ID 1,ROLE_ID 4
所以我想這:
SELECT user_id FROM roles_users WHERE role_id IN (1) // MEMBERS ONLY
SELECT user_id FROM roles_users WHERE role_id IN (1,2) // ADMIN
SELECT user_id FROM roles_users WHERE role_id IN (1,2,3) // SELLER
SELECT user_id FROM roles_users WHERE role_id IN (1,4) // PARTNERS
但這些查詢不能正常工作。他們給我的數量超過了它的預期。我相信這是因爲它不排除任何行,
我的意思是在查詢時它應該查找role_id 1,對於成員,它也包括合作伙伴,管理員,賣家也是因爲它只檢查它是否是theres任何與行role_id 1和多數民衆贊成它。
那麼我該如何做到這一點?因此,當它看起來在成員之後,它也應該確保user_id沒有更多的行與其他role_id像2,3,4
嘗試選擇不同的user_Id – Sparky 2011-12-18 20:27:12
您需要的關係運算符是[division](http://en.wikipedia.org/wiki/Relational_algebra#Division_2.8.C3.B7.29),通常稱爲[「supplier」誰提供所有部件「](http://www.dbdebunk.com/page/page/772076.htm)。建議閱讀[這裏](http://www.simple-talk.com/sql/t-sql-programming/divided-we-stand-the-sql-of-relational-division/),[here](http: //www.dbdebunk.com/page/page/772076.htm)和[這裏](http://www.cs.arizona.edu/~mccann/research/divpresentation.pdf)。 – onedaywhen 2011-12-19 09:24:54