let $query_a := (for $st in $student
where
(some $t in $transcript
satisfies ($t.ssn = $st.ssn and $t.dcode = "CS" and $t.cno = 530))
return {ssn: $st.ssn, name: $st.name, major: $st.major, status: $st.status}
)
这里的表student表是空的,它返回的query_a为null。如果表格为空,如何编写代码,例如学生[]。
我认为查询中的问题是缺少与let子句对应的return子句。查询在另一个FLWOR表达式(let$query_a…(中嵌套了一个FLWORD表达式(用于$st…(,并且必须有两个返回子句。
这是一个固定的查询,缩进设置有利于可读性(假设$student
和$transcript
分别正确绑定到学生对象和成绩单对象的序列(:
let $query_a :=
for $st in $student
where (
some $t in $transcript
satisfies ($t.ssn = $st.ssn and $t.dcode = "CS" and $t.cno = 530)
)
return {
ssn: $st.ssn,
name: $st.name,
major: $st.major,
status: $st.status
}
return $query_a
注意,CCD_;空";value(它是一个原子项的序列,即null项(:如果序列$student中没有任何项通过谓词过滤器,则$query_a
将是空的项序列。
然后,您可以测试序列是否为空,函数为空:
if(empty($sequence))
then ...
else ...