“for”子句如何在XQuery中工作?

时间:2018-05-27 08:48:41

标签: html mysql sql

我在学习XQuery时遇到了这个问题 我不知道“for”子句在FLWOR表达式中是如何工作的 以下XQuery如何执行courseinstructorteaches元素的连接操作? “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>

The “university” document (part 1)

The “university” document (part 2)

1 个答案:

答案 0 :(得分:0)

withEnv(["DESTINATION=$destination"]) { powershell ''' $destinationPath ="$env:DESTINATION" ... ''' } 是一个迭代子句。它根据给定的查询构造结果。让我们看看你的代码,看看它意味着什么......

forfor $c in /university/course下的每个元素执行其作用域行(无论代码是什么......)。 /university/course/university/instructor同样如此。

/university/teaches中所述,如果没有teaches的过滤器,那么[$c/course_id= $t/course_id and $t/IID = $i/IID]courceinstructor之间基本上会有CROSS JOIN返回三个结果的乘法。

现在 - 我说过交叉加入吗?因为你已经构建了你期望的输出,所以这一定是令人困惑的。在每个连接语句中(如果你对SQL有点了解......)SELECT clause是第一个(即使它最终可能被处理...),不像你构建逻辑的XQuery - 然后你决定要做什么返回,如teaches中所述。

在您的return <course instructor> { $c $i } </course instructor>语句中,您正在指示XQuery:对于三个结果之间的交叉联接返回的结果中的每条记录,return$c和{{1} } - 创建一个新的$i元素 - 并将$tcourse instructor作为其子元素。

小注意:元素/属性名称不能包含空格。我不确定“课程讲师”会如何影响你的xquery的结果。 Refer here for more info