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