单个查询从一个表中检索两个xml结果

时间:2012-07-03 02:37:52

标签: mysql xml

Table
Class   Firstname   Lastname    mark
V       John        Lim         60
V       Wills       smith       80
VI      Mark        Bay         75
VI      Carl        mark        65

我的SQL中有这个表。我需要一个查询来根据一个表中的“类类型”检索两个不同的XML结果

以下是我的预期结果

Result1
<Studentslist>
<Students>
        <class>V</class>
        <Firstname>John</Firstname>
        <Lastname>Lim</Lastname>
        <mark>60</mark>
</Students>
<Students>
        <class>V</class>
        <Firstname>Wills</Firstname>
        <Lastname>smith</Lastname>
        <mark>80</mark>
</Students>
</Studentslist>

Result2
<Studentslist>
<Students>
        <class>VI</class>
        <Firstname>Mark</Firstname>
        <Lastname>Bay</Lastname>
        <mark>75</mark>
</Students>
<Students>
        <class>VI</class>
        <Firstname>Carl</Firstname>
        <Lastname>mark</Lastname>
        <mark>65</mark>
</Students>
<Studentslist>
非常感谢!

1 个答案:

答案 0 :(得分:0)

对于查询部分,请使用UNION

(SELECT class, firstname, lastname, mark from students where class='V')
UNION ALL
(SELECT class, firstname, lastname, mark from students where class='VI')

编辑:使用光标

DELIMITER | 
Drop procedure if exists `GetData`;
CREATE PROCEDURE `GetData`()


BEGIN


  DECLARE bDone INT;
  DECLARE var1 CHAR(16);   

  DECLARE curs CURSOR FOR  SELECT distinct(class) FROM students;
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET bDone = 1;

  SET bDone = 0;

  DROP TEMPORARY TABLE IF EXISTS tblResults;
  CREATE TEMPORARY TABLE IF NOT EXISTS tblResults (
    class varchar(255),
    firstname varchar(255),
    lastname varchar(255),
    mark varchar(255)
  );

  OPEN curs;


  emp_loop: LOOP
    FETCH curs INTO var1;
     IF bDone=1 THEN       /* No more rows*/
              LEAVE emp_loop;
     END IF;

    INSERT INTO tblResults SELECT class, firstname, lastname, mark FROM `students` where class=var1;

  END LOOP emp_loop;

  CLOSE curs;
  SELECT * FROM tblResults;
END|
DELIMITER ;