我有这样的表。
PersonID, KvalifikationId
1 1
1 2
1 3
2 1
2 3
我想编写SQL querye返回所有没有kvalifikation 2的人。
我写了
SELECT DISTINCT PersonID where NOT KvalifikationID = 2
但这会让人1和2都归来。 如何选择只返回没有kval2的人ID?
答案 0 :(得分:7)
试试这个,
SELECT DISTINCT PersonID
FROM tableName
WHERE PersonID NOT IN
(
SELECT PersonID
FROM tableName
WHERE KvalifikationId = 2
)
答案 1 :(得分:3)
SELECT DISTINCT person_id
FROM tableName t1
WHERE not exists
(
select 1
from tableName
where person_id = t1.person_id and KvalifikationId = 2
)
答案 2 :(得分:3)
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
答案 3 :(得分:3)
通过在外部查询中使用您的Person
表而不是N:N表,您可以跳过distinct
,并且对子查询的反半连接将具有更好的性能,因为它位于聚集索引。 (假设PersonID
表中的Person
是pk)
SELECT PersonID
FROM tblPerson
WHERE NOT EXISTS
(
SELECT NULL
FROM tblPersonKvalifikation
WHERE KvalifikationId = 2 AND
tblPerson.PersonID = tblPersonKvalifikation.PersonID
)
答案 4 :(得分:-1)