Sql 运算符不工作的SELECT语句

Sql 运算符不工作的SELECT语句,sql,Sql,我有这两个表,我需要一个查询,该查询输出每个具有lvnr 050056而不是050054的成员 我有这两张桌子 我已尝试使用以下查询,但无法正常工作: SELECT s.matrnr, s.vorname, s.nachname FROM student s INNER JOIN teilgenommen t ON s.matrnr = t.matrnr WHERE (t.lvnr = 050056) AND (t.lvnr != 050054) 应该只显示ID为011111的Martin

我有这两个表,我需要一个查询,该查询输出每个具有lvnr 050056而不是050054的成员

我有这两张桌子

我已尝试使用以下查询,但无法正常工作:

SELECT s.matrnr, s.vorname, s.nachname
FROM student s
INNER JOIN  teilgenommen t ON s.matrnr = t.matrnr
WHERE (t.lvnr = 050056) AND (t.lvnr != 050054)
应该只显示ID为011111的Martin Huber,但我两个都有

如果有任何建议,我将不胜感激。

使用存在和不存在:

前导零表示lvnr实际上存储为字符串。如果是,则应使用单引号作为比较值。

使用存在和不存在:

前导零表示lvnr实际上存储为字符串。如果是这样,则应使用单引号作为比较值。

您可以执行以下操作:

选择 s、 matrnr, s、 沃纳, s、 纳希纳姆 从…起 学生s 内连接 选择 matrnr, 当lvnr='050056'时的maxcase,则1或0结束为a, 当lvnr='050054'时的最大情况,则1或0结束为b 从…起 泰尔格诺曼 分组 马特纳 a=1,b=0的 T 关于s.matrnr=t.matrnr 你可以做:

选择 s、 matrnr, s、 沃纳, s、 纳希纳姆 从…起 学生s 内连接 选择 matrnr, 当lvnr='050056'时的maxcase,则1或0结束为a, 当lvnr='050054'时的最大情况,则1或0结束为b 从…起 泰尔格诺曼 分组 马特纳 a=1,b=0的 T 关于s.matrnr=t.matrnr
这也可以通过聚合和用于筛选的having子句来解决:

select s.matrnr, s.vorname, s.nachname
from student s
inner join  teilgenommen t on s.matrnr = t.matrnr
group by s.matrnr, s.vorname, s.nachname
having
    max(case when t.lvnr = 050056 then 1 else 0 end) = 1
    and max(case when t.lvnr = 050054 then 1 else 0 end) = 0

这也可以通过聚合和用于筛选的having子句来解决:

select s.matrnr, s.vorname, s.nachname
from student s
inner join  teilgenommen t on s.matrnr = t.matrnr
group by s.matrnr, s.vorname, s.nachname
having
    max(case when t.lvnr = 050056 then 1 else 0 end) = 1
    and max(case when t.lvnr = 050054 then 1 else 0 end) = 0