couId couName stuId
GQ1204001 岗前培训课程 12
ZQ1203001 证券业务 12
ZQ1203001 证券业务 123
JS1205001 课程 123上面是表的结构,现在我想选出所有课程不要重复,但选出的课程中必须包含stuId=123的记录,即选择证券业务时优先选择stuId=123的记录,同时岗前培训课程也要选上,求助各位大神,这个sql语句怎么写啊?(我用的hibernate进行查询)

解决方案 »

  1.   

    selec distinct * from 表名 where stuId='123' and couName='岗前培训课程'
    “distinct ”去重复。搂着试一试,看看能不能解决问题!
      

  2.   

    提供个思路:先挑出所有重复的(剩下的是不重复的),结果 = 用剩下的 + 重的里面挑出stuId=123的
      

  3.   


    select * from 选课表 c where c.couName in (select distinct c.couName from 选课表 c) and c.stuId = 123;
      

  4.   


    我把and改成or就有重复的,在第一个select那加一个distinct couName 也不管用,这是怎么回事啊
      

  5.   


    为什么不行,那你就把in里面的循环拼接,换成or,不过这两种应该是等同的。
      

  6.   


    光输出couName时到没有重复的了,但再加几个属性的话就重复的了,难道distinct是作用于所有属性吗?
      

  7.   

    SELECT * FROM 表名
    GROUP BY couId  
    HAVING COUNT(couId )=1
    UNION
    SELECT * FROM 表名
    WHERE couId  NOT IN 
    (SELECT couId FROM 表名
    GROUP BY couId 
    HAVING COUNT(couId)=1)
    AND stuId=123
      

  8.   

    选出的课程必须包含stuId=123的记录,那不就是价格where  stuId = 123;
    课程名必须不重复,加个distinct,应该不难。不知道我理解的有问题,还是楼主把意思没表达清楚。
      

  9.   

    可是这个写成hql语句怎么写啊
      

  10.   


    我还进行分页,如果写成两条语句的话不好分页,用本地sql可以吗?如果可以的话怎么配置啊?我配了好长时间老是不行总报错!!!!!