9.查询和" 01 "号的同学学习的课程完全相同的其他同学的信息的一种实现方式,及group_concat实现group by组内排序


在网上看到一位网友写的实现代码如下:

select
    *
from
    student
where
    s_id in (
    select
        s_id
    from
        score t1
    group by
        s_id
    having
        group_concat(c_id) = (
            select group_concat(c_id) as str2
        from
            score
        where
            s_id = '01')
        and s_id != '01');

但是这段代码有bug,那就是比如s_id=01同学的c_id依次是01、02、03,但是s_id=0x的某位同学的c_id是01、03、02,0x同学是符合条件的,但是上面代码检索不到,一位01同学的字符串是‘01,02,03’,而0x同学的字符串是‘01,03,02’。

所以要想满足需求,需要实现组内排序再拼接,在网上找了很多文章都没有正确解答,最后发现group_concat方法自身是可以实现组内排序的。。。。

具体代码如下:

select
    *
from
    student
where
    sid in (
    select
        sid
    from
        sc t1
    group by
        sid
    having
        group_concat(cid ORDER BY cid) = (
            select group_concat(cid ORDER BY cid) as str2
        from
            sc
        where
            sid = '01')
        and sid != '01');

 实现方式2:

select a.* from student a where a.sid in(
    select sid from sc where sid != '01' and cid in
                (select cid from sc where sid = '01')
    group by sid having count(1)=
                ( select count(1) from sc where sid = '01'));


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM