student表:id(学号),truename(真是名字),classid(课程代号)studentclass表:classid(课程代号),classname(课程名)classchoose表:sid(学生代号),cid(课程代号)
我现在要选出所有学生的记录 包括他们所选课程的课程名。
我写的SQL这样:
select * from student a left join classchoose b on a.id=b.sid left join studentclass c b.cid=c.classid
但这样写 选出来的 是所有被选课程为主 一个学生选了几个课程 就都会列出来,能不能有办法,只以学生为主,比如一个学生选了多门课,也只列出那一个学生。

解决方案 »

  1.   

    DECLARE @t TABLE(id int, value varchar(10))
    INSERT @t SELECT 1, 'aa'
    UNION ALL SELECT 1, 'bb'
    UNION ALL SELECT 2, 'aaa'
    UNION ALL SELECT 2, 'bbb'
    UNION ALL SELECT 2, 'ccc'-- 查询处理
    SELECT *
    FROM(
        SELECT DISTINCT 
            id
        FROM @t
    )A
    OUTER APPLY(
        SELECT 
            [values]= STUFF(REPLACE(REPLACE(
                (
                    SELECT value FROM @t N
                    WHERE id = A.id
                    FOR XML AUTO
                ), '<N value="', ','), '"/>', ''), 1, 1, '')
    )N/*--结果
    id          values
    ----------- ----------------
    1           aa,bb
    2           aaa,bbb,ccc
    (2 行受影响)
    --*/类似这种?
      

  2.   

    select id,truename,
    stuff((select ','+b.classname 
    from classchoose a join studentclass b on a.cid = b.classid
    where a.sid = t.id for xml path('')),1,1,'') cname
    from student t
    group by id,truename
      

  3.   

    不对啊 你这个在mysql执行不了
      

  4.   

    MYSQL  这里是MSSQL了楼主。
      

  5.   

    我没找到mysql板块  我还以为 都差不多呢
      

  6.   

    其他数据库版块里有MYSQL的。