Передача результатов в переменную
Хорошо, позвольте мне начать с того, что я совершенно новичок в XQuery. Я начал изучать это только 2 дня назад. Теперь моя задача состоит в том, чтобы использовать 3 отдельных XML-файла, которые по сути содержат таблицы.
Первый файл с именем зависимым.xml содержит следующие поля: essn, имя-зависимого, отношение.
Второй файл с именем employee.xml содержит следующие поля: fname, lname, ssn, dno
Третий файл с именем Department.xml содержит следующие поля: dname, dnumber, mgrssn
Таким образом, отношения между этими таблицами: essn = ssn, ssn = mgrssn и dno = dnumber.
Мне нужно вернуть список всех иждивенцев вместе с их соответствующим сотрудником и соответствующим менеджером этих сотрудников. Вот как выглядит мой код:
{
for $d in doc("../company/dependent.xml")//dependent,
$e in doc("../company/employee.xml")//employee
where $d/essn = $e/ssn
return
<dependent
name="{ $d/dependent_name }"
fname="{ $e/fname }" lname="{ $e/lname }"
/>
}
Это дает мне список всех иждивенцев и их соответствующих сотрудников, так что все хорошо до этого момента.
Проблема в том, что менеджеры также являются сотрудниками, поэтому их имена указаны в таблице сотрудников. Поэтому мне нужно сопоставить dno сотрудников, у которых есть иждивенцы, с номером в таблице отделов, чтобы получить mgrssn этих отделов, а затем сопоставить эти mgrssn с ssn сотрудника, чтобы получить имена менеджеров.
Моя идея состоит в том, чтобы сохранить dno сотрудников с зависимостями, которые я получаю из своего кода, в переменную, а затем использовать эту переменную, чтобы получить менеджеров для этих отделов и использовать их следующим образом:
{
for $d in doc("../company/department.xml")//department,
$e in doc("../company/employee.xml")//employee
where $d/mgrssn = $e/ssn and $d/dnumber = $**variable**
return
<manager
fname="{ $e/fname }" lname="{ $e/lname }"
/>
}
Проблема в том, что я понятия не имею, как это сделать, и я понимаю, что это будет отдельный цикл for. Есть ли способ, которым я могу сделать все это за один цикл? Также, если есть более простой способ сделать то, что мне нужно, я тоже открыт для предложений:)