String counthql="select count(*) from (select distinct trainOrder.userid, trainOrder.course from TrainOrder trainOrder where trainOrder.course in (select course.courseId from KmsCourse course where course.knowledgeId='"+ knowledgeId + "')) as t";
 请问这条语句哪里错了啊 在我网上找来好多都是一样的 到我这就报 :line 21 unexpected token:(
                                                             和line 87 unexpected token: from 这两个提示。
哪位遇到过啊。

解决方案 »

  1.   

    如果想查询有多少条记录的话我觉得是不是应该这样啊
    select count(distinct trainOrder.userid)
              from TrainOrder trainOrder
             where trainOrder.course in
                   (select course.courseId
                      from KmsCourse course
                     where course.knowledgeId = '"+ knowledgeId + "')
      

  2.   


    SELECT COUNT(*) FROM TrainOrder trainOrder WHERE trainOrder.course.knowledgeId = ? GROUP BY trainOrder.userid试试这个吧....如果不对, 把你发的那个hql的每个属性的意思贴出来看看
      

  3.   

    上面发的这个可能不行, 你还是得讲下select distinct trainOrder.userid, trainOrder.course 你查询distinct的userid还有course是什么意图...你的distinct语法有错, distinct是用括号的DISTINCT(trainOrder.userid)这样写.
      

  4.   

    还有, HQL功能很强大的, 不要把自己局限到SQL的思想中, 要用对象的眼光看你的实体, 不要把自己限制成关系思维, 不然Hibernate用了跟没有用就没多大区别了.
      

  5.   

    我记得hql语句好像不支持 select 。。 from () a ; 不支持这种,from 直接写数据库存在的表 而不能使用临时生成的表。
      

  6.   

    哥哥你这个我试过了 可以执行 但是 count(distinct trainOrder.userid) 的限制条件不够 查出来的数据多了 不准确。我必须用 distinct trainOrder.userid trainOrder.course 这两个条件限制。再统计总条数。
      

  7.   

    distinct trainOrder.userid, trainOrder.course 是想去除这两列重复的数据 执行到没报错。
      

  8.   

    我用的 Hibernate 
    trainOrderId        courseId        courseWareId        userId
    1                     c_10              cw10             admin
    2                     c_10              cw11             admin
    3                     c_10              cw12             admin
    4                     c_10              cw13             admin
    5                     c_10              cw14             admin6                     c_20              cw10             admin
    7                     c_20              cw11             admin
    8                     c_20              cw12             admin
    9                     c_20              cw20             admin
    10                    c_20              cw22             admin11                     c_10              cw10             tset
    12                     c_10              cw11             tset
    13                     c_10              cw12             tset
    14                     c_10              cw13             tset
    15                     c_10              cw14             tset16                     c_20              cw10             tset
    17                     c_20              cw11             tset
    18                     c_20              cw12             tset
    19                     c_20              cw20             tset
    20                     c_20              cw22             tset
    我现在只想统计出  admin   c_10 出现一次
                      admin   c_20 出现一次
                      test    c_10 出现一次
                      test    c_20 出现一次
    请问我的 String counthql="select count(*) from (select distinct trainOrder.userid, trainOrder.course from TrainOrder trainOrder where trainOrder.course in (select course.courseId from KmsCourse course where course.knowledgeId='"+ knowledgeId + "')) as t";  不对吗?
      

  9.   

    你这样的要求,应该用group by userid, courseId啊。上面有人提到hql里不能用临时表,我也有这种印象
      

  10.   

    select count(distinct ud.user) from t_user_dept ud group ud.user; 这个hql 语句行吗?