我有这样的桌子。
PersonID, KvalifikationId
1 1
1 2
1 3
2 1
2 3
我想编写返回所有没有 kvalifikation 2 的人的 SQL 查询。
我写
SELECT DISTINCT PersonID where NOT KvalifikationID = 2
但这会返回第 1 个人和第 2 个人。我如何选择只返回没有 kval2 的 personId?
我有这样的桌子。
PersonID, KvalifikationId
1 1
1 2
1 3
2 1
2 3
我想编写返回所有没有 kvalifikation 2 的人的 SQL 查询。
我写
SELECT DISTINCT PersonID where NOT KvalifikationID = 2
但这会返回第 1 个人和第 2 个人。我如何选择只返回没有 kval2 的 personId?
试试这个,
SELECT DISTINCT PersonID
FROM tableName
WHERE PersonID NOT IN
(
SELECT PersonID
FROM tableName
WHERE KvalifikationId = 2
)
Declare @t table(PersonID int,KvalifikationId int)
Insert Into @t Select 1 ,1
Insert Into @t Select 1, 2
Insert Into @t Select 1,3
Insert Into @t Select 2 ,1
Insert Into @t Select 2,3
Select PersonId From @t
Except
Select PersonID From @t where KvalifikationId = 2
结果
PersonId
2
SELECT DISTINCT person_id
FROM tableName t1
WHERE not exists
(
select 1
from tableName
where person_id = t1.person_id and KvalifikationId = 2
)
通过Person在外部查询中使用您的表而不是您的 N:N 表,您可以跳过distinct子查询的反半连接,因为它位于聚集索引上,所以性能会更好。(假设表PersonID中为pk Person)
SELECT PersonID
FROM tblPerson
WHERE NOT EXISTS
(
SELECT NULL
FROM tblPersonKvalifikation
WHERE KvalifikationId = 2 AND
tblPerson.PersonID = tblPersonKvalifikation.PersonID
)
试试这个。
SELECT DISTINCT PersonID from tableName
WHERE KvalifikationId NOT IN ('2');