我在学习XQuery时遇到了这个问题
我不知道“for”子句在FLWOR表达式中是如何工作的
以下XQuery如何执行course
,instructor
和teaches
元素的连接操作?
“for”中的变量是否像$c
那样是一个类似光标的东西?
我希望有人可以在“for”子句中详细说明以下XQuery的工作流程和变量的功能。
for $c in /university/course,
$i in /university/instructor,
$t in /university/teaches[$c/course_id= $t/course_id and $t/IID = $i/IID]
return <course_instructor> { $c $i } </course_instructor>
答案 0 :(得分:0)
withEnv(["DESTINATION=$destination"]) {
powershell '''
$destinationPath ="$env:DESTINATION"
...
'''
}
是一个迭代子句。它根据给定的查询构造结果。让我们看看你的代码,看看它意味着什么......
for
为for $c in /university/course
下的每个元素执行其作用域行(无论代码是什么......)。 /university/course
和/university/instructor
同样如此。
如/university/teaches
中所述,如果没有teaches
的过滤器,那么[$c/course_id= $t/course_id and $t/IID = $i/IID]
,cource
和instructor
之间基本上会有CROSS JOIN返回三个结果的乘法。
现在 - 我说过交叉加入吗?因为你已经不构建了你期望的输出,所以这一定是令人困惑的。在每个连接语句中(如果你对SQL有点了解......)SELECT clause是第一个(即使它最终可能被处理...),不像你构建逻辑的XQuery - 然后你决定要做什么返回,如teaches
中所述。
在您的return <course instructor> { $c $i } </course instructor>
语句中,您正在指示XQuery:对于三个结果之间的交叉联接返回的结果中的每条记录,return
,$c
和{{1} } - 创建一个新的$i
元素 - 并将$t
和course instructor
作为其子元素。
小注意:元素/属性名称不能包含空格。我不确定“课程讲师”会如何影响你的xquery的结果。 Refer here for more info