我有一张像
这样的表 Name Privilege
x 1
y 2
x 3
A 1
现在我只想获取仅拥有权限1的名称。 即,重新应该是,
Name Privilege
A 1
有人可以帮我这个吗?
答案 0 :(得分: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,这是一个不错的阅读。 “确切分区”下的例子就是你所说的那种。
答案 1 :(得分: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);