2010-12-16 76 views
0

我有一個表像,與列值約束獲取記錄

Name    Privilege               
    x     1                 
    y     2                 
    x     3                 
    A     1                 

現在我想只取誰擁有特權1單獨的名稱。 即,在reuslt應該是,

Name   Privilege               
    A    1    

有人可以幫我在這?

回答

0
SELECT 
    * 
FROM 
    <table> t 
     LEFT JOIN 
    <table> t2 
     ON 
      t.Name = t2.Name and 
      t2.Privilege <> 1 
WHERE 
    t2.Name is null and 
    t.Privilige = 1 

或者,您可以將其作爲NOT EXISTS子句和相關子查詢寫入。


編輯

從評論,你想在哪裏可以找到「這一套,也只有這一套相匹配」 - 把你的情況在其他表(可能是一個臨時表或表變量) ,然後開始看「關係分工」。谷歌搜索這個詞帶來了Joe Celko article這是一個體面的閱讀。 「精確分割」下的例子就是你所說的那種。

+0

非常感謝您的回答。如何更改約束條件,如何獲取具有特權(1和2),(1和3),(1,2和3)單獨等, – Nanda 2010-12-16 09:24:31

0
;WITH set1 AS (SELECT * FROM Privileges WHERE Privilege IN (1, 3)) 
SELECT up.UserId 
FROM UserPrivileges up 
INNER JOIN set1 ON set1.Privilege = set1.Privilege 
GROUP BY up.UserId 
HAVING COUNT(up.Privilege) = (SELECT COUNT(*) FROM set1);