Как работает предложение «for» в XQuery? - PullRequest
0 голосов
/ 27 мая 2018

Я столкнулся с проблемой, когда изучал XQuery.
Я не знаю, как работает предложение for в выражении FLWOR.
Как следующий XQuery может выполнить операцию соединения course, instructor и teaches элементов?Является ли переменная в «for», такая как $c, чем-то похожим на курсор?Я надеюсь, что кто-то может разработать рабочий процесс следующего XQuery и функцию переменных в предложении for.

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 голосов
/ 27 мая 2018

for - это итерационное предложение.Он строит результат на основе данного запроса.Давайте пройдемся по вашему коду и посмотрим, что он означает.

for $c in /university/course выполняет свою ограниченную строку (какой бы ни был код под ним ..) для каждого элемента под /university/course.То же самое относится к /university/instructor и /university/teaches.

Без фильтра для teaches, как указано в [$c/course_id= $t/course_id and $t/IID = $i/IID] - вы по существу имеете CROSS JOIN между cource, instructor и teaches, которые возвращают умножение трех результатов.

Теперь - я сказал перекрестное соединение?Поскольку вы не создали ожидаемый результат, это должно сбивать с толку.В каждом операторе соединения (если вы немного знаете SQL ...) предложение SELECT стоит первым (даже если оно может быть обработано в конце концов ...), в отличие от XQuery, где вы создаете свою логику - а затем вырешите, что возвращать, как указано в return <course instructor> { $c $i } </course instructor>.

. В своем операторе return вы указываете XQuery, что: для каждой записи в результатах, возвращаемых перекрестным объединением трех результатов, $c, $i и $t - создайте новый элемент course instructor - и поместите $c и $i в качестве его дочерних элементов.

небольшая заметка: имена элементов / атрибутов не могут содержать пробелы,Я не уверен, как "преподаватель курса" повлияет на результат вашего xquery. Подробнее см. Здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...