查找所有匹配 X 但不匹配 Y 的主题
Find all subjects that match X but don't match Y
我有一个简单的“注册”table,其中包含已注册课程的学生。一个学生可以注册多门课程。
我想找到所有注册了课程 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_ids :/
我做错了什么?
所以我设法使用某种“自连接”解决了这个问题:
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
我有一个简单的“注册”table,其中包含已注册课程的学生。一个学生可以注册多门课程。
我想找到所有注册了课程 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_ids :/
我做错了什么?
所以我设法使用某种“自连接”解决了这个问题:
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