Передача результатов в переменную

Хорошо, позвольте мне начать с того, что я совершенно новичок в 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. Есть ли способ, которым я могу сделать все это за один цикл? Также, если есть более простой способ сделать то, что мне нужно, я тоже открыт для предложений:)

0 ответов

Другие вопросы по тегам