Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 获取具有列值约束的记录_Sql Server 2005 - Fatal编程技术网

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);