2011-04-30 61 views
2

的情況是有課程和講師,他們有一個多對多的關係(1當然可以有很多講師,講師1人可以教多門課程)如何在sql server 2008中爲多對多關係生成嵌套的XML?

下面的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或其他類似的東西。任何幫助將不勝感激。謝謝。

+0

Course_Lecturer是課程和講師之間的關係表,因爲它是多對多的關係。 – Geshan 2011-04-30 21:19:47

回答

3
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')