查找与 X 匹配但与 Y 不匹配的所有科目

  • 本文关键字:不匹配 查找 sparql
  • 更新时间 :
  • 英文 :


我有一个简单的" registration "表,其中包含已注册课程的学生。一个学生可以注册多门课程。

我想查找所有注册了课程1234但没有注册课程5678的学生.

所以我尝试了这个尝试:

SELECT ?student_id
WHERE {
?registration :R-Student_id ?student_id ;
:R-Course_code ?course_code .
FILTER(?course_code = "1234") .
FILTER NOT EXISTS {
?registration :R-Course_code "5678" .
}
}
ORDER BY ?student_id

但是似乎最后一个FILTER NOT EXISTS对查询没有影响?我仍然可以从查询结果中找到同样注册了第二门课程的student_id:/

我在这里做错了什么?

所以我设法解决它使用某种"self join";

SELECT ?student_id
WHERE {
?r1 :R-Student_id ?student_id ;
:R-Course_code "1234" .
FILTER NOT EXISTS {
?r2 :R-Student_id ?student_id ;
:R-Course_code "5678" .
}
}
ORDER BY ?student_id

最新更新