Sql server 2005 获取具有列值约束的记录
我有一张像Sql server 2005 获取具有列值约束的记录,sql-server-2005,Sql Server 2005,我有一张像 Name Privilege x 1 y 2
Name Privilege
x 1
y 2
x 3
A 1
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
现在,我只想获取拥有特权1的姓名。
也就是说,它应该是
Name Privilege
A 1
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
有人能帮我吗 选择
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
*
从…起
T
左连接
t2
在…上
t、 Name=t2。名称和
t2.特权1
哪里
t2.名称为null,并且
t、 特权=1
或者,您也可以将其作为NOT EXISTS子句和相关子查询编写
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
编辑
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
在注释中,您希望找到“匹配此集合,并且仅匹配此集合”-将您的条件放在另一个表中(可能是临时表或表变量),然后开始查看“关系划分”。在谷歌上搜索这个词会得到一个不错的答案。“精确除法”下的示例与您所说的相同。非常感谢您的回答。如果约束条件发生变化,例如,仅使用特权(1和2)、(1和3)、(1,2和3)获取名称,我如何使用相同的方法。,
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
;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);