Как мне создать вложенный XML для многих для многих отношений в SQL Server 2008? - PullRequest
2 голосов
/ 01 мая 2011

Ситуация такова, что есть курсы и лекторы, и у них много-много связей (1 курс может иметь много лекторов, 1 лектор может преподавать много курсов)

Следующий XML повторяет название курса:

SELECT
    C.COURSE_ID "@course_id"
    ,   C.COURSE_NAME "Course_Name"
    --get lecturer id(s) of the course
    ,   CL.LECTURER_ID  

    FROM 
    COURSE C LEFT JOIN COURSE_LECTURER CL ON C.COURSE_ID = CL.COURSE_ID
    --LEFT JOIN AS ALL COURSES DON'T HAVE LECTURERS COULD BE INNER :)
FOR XML PATH('Course'), ROOT('Program')

Это дает мне следующий вывод (фрагмент):

<Course course_id="ISFND 1.1">
    <Course_Name>Relational Databases and SQL</Course_Name>
    <LECTURER_ID>ME123</LECTURER_ID>
  </Course>
  <Course course_id="ISFND 1.1">
    <Course_Name>Relational Databases and SQL</Course_Name>
    <LECTURER_ID>HS123</LECTURER_ID>
  </Course>

Но вывод, который я хочу:

<Course course_id="ISFND 1.1">
        <Course_Name>Relational Databases and SQL</Course_Name>
        <LECTURER_ID>ME123</LECTURER_ID>
        <LECTURER_ID>HS123</LECTURER_ID>
      </Course>

Я полагаю, что в моем sql есть проблема для многих, может быть, мне нужно использовать IN или что-то подобное для каждого. Любая помощь будет оценена. Спасибо.

1 Ответ

3 голосов
/ 01 мая 2011
SELECT
    C.COURSE_ID "@course_id"
    ,   C.COURSE_NAME "Course_Name"
    , (SELECT CL.LECTURER_ID
       FROM COURSE_LECTURER CL
       WHERE C.COURSE_ID = CL.COURSE_ID
       FOR XML PATH(''), TYPE)
FROM COURSE C
FOR XML PATH('Course'), ROOT('Program')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...