我不知道如何框定这个问题——所以直接把 sql 语句放在这里。
declare @tbl table(Id varchar(4),Userid varchar(10),Name varchar(max),Course varchar(max))
insert into @tbl values
('1','UserID1','UserA','Physics'),
('2','UserID2','UserB','Chemistry'),
('3,','UserID1','UserA','Chemistry')
现在,
要获得参加过化学的用户列表,我会写
select * from @tbl where Course='Chemistry'
同样对于物理学,我会写
select * from @tbl where Course='Physics'
问题是当我尝试编写查询“获取未参加物理的学生列表”时。没多想就写了这个
select * from @tbl where Course!='Physics'
结果是错误的(它正在获取有关 UserA 的详细信息-尽管他已在物理学中注册)
Id Userid Name Course
2 UserID2 UserB Chemistry
3, UserID1 UserA Chemistry
为了解决这个问题,我像这样重写了查询 - 但不知何故,我认为这不是正确的方法。
select * from @tbl where Course!='Physics'
and Userid not in (select Userid from @tbl where Course='Physics')
请帮忙!