I have a table of courses that are RELATE
d by requires_prerequisite
to other courses. I am trying to get 2nd-level prerequisite dependencies for a course (courses that have courses as prerequisites which have this course as a prerequisite), and I have a query as follows:
SELECT id, <-requires_prerequisite<-course<-requires_prerequisite<-course AS indirect_postrequisites
FROM course WHERE id = course:APS105;
And that gives me this:
[
{
"time": "526.8µs",
"status": "OK",
"result": [
{
"id": "course:APS105",
"indirect_postrequisites": [
"course:ECE345",
"course:ECE297",
"course:ECE344",
"course:ECE295",
"course:ECE345",
"course:ECE297",
"course:ECE344",
"course:ECE295"
]
}
]
}
]
However as you will notice, there are duplicate entries in here.¹ How do I filter out the duplicates? In standard SQL I would use
SELECT DISTINCT `in` FROM requires_prerequisite
WHERE `out` IN (SELECT `in` FROM requires_prerequisite WHERE `out`='APS105';
But if I try to use
SELECT DISTINCT id, <-requires_prerequisite<-course<-requires_prerequisite<-course AS indirect_postrequisites
FROM course WHERE id = course:APS105;
then I get
{
"code": 400,
"details": "Request problems detected",
"description": "There is a problem with your request. Refer to the documentation for further information.",
"information": "There was a problem with the database: Parse error on line 1 at character 0 when parsing 'SELECT DISTINCT id, <-requires_prerequisite<-course<-requires_prerequisite<-course AS indirect_postr'"
}
How can I filter out duplicate values?
¹ If you want to know why the duplicates appear, it's because
RELATE course:ECE297->requires_prerequisite->course:APS105;
RELATE course:ECE297->requires_prerequisite->course:ECE244;
RELATE course:ECE244->requires_prerequisite->course:APS105;
After scrounging the documentation, I found the array::distinct()
function which did exactly what I wanted:
SELECT id, array::distinct(<-requires_prerequisite<-course<-requires_prerequisite<-course) AS indirect_postrequisites FROM course WHERE id = course:APS105;
[
{
"time": "537.8µs",
"status": "OK",
"result": [
{
"id": "course:APS105",
"indirect_postrequisites": [
"course:ECE345",
"course:ECE297",
"course:ECE344",
"course:ECE295"
]
}
]
}
]