`
xiao5233
  • 浏览: 26231 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

中间表的 in 子查询

阅读更多
role 表
loginuser表    他们是多对多的关系

还有dept表 和loginuser是一对多的关系

我想要查询 某些部门下 的某些角色下的 所有用户

在数据库中的查询语句是这样
select * from login_user u , dept d on d.did=u.did and d.did in (1,2) and u.isteacher=1 and  u.userid in (select userid from  user_role ur where ur.roleid in (1,2))

但是在  hql中 则会报错
String hql="select u from LoginUser u , Dept d where   d.did=u.dept.did  and  d.did in (1,2) and u.userid in (select u2.userid from LoginUser u2 , u2.roles r where r.roleid in ("+ roleids+") ";

报错:
00:38:37,464 ERROR org.hibernate.hql.PARSER:56 - line 1:225: expecting CLOSE, found 'null'

开始以为hql不支持from 后的 in 子查询
或者不支持多对多关系的子查询

后来一查, 对于多对多里面的 set集合可以用  u in elements(r.loginUsers)
来取。
修改后的sql语句
String hql="select u  from Dept d, Role r ,LoginUser u where     d.did=u.dept.did  and  d.did in ("+deptids+") and  u in elements(r.loginUsers) and r.roleid in("+roleids+")";



分享到:
评论

相关推荐

    数据库设计(包括select语句、子查询、语句嵌套)

    在本话题中,我们将探讨数据库设计的基础,特别关注SELECT语句、子查询以及语句嵌套这三个核心概念。 首先,数据库设计不仅仅是创建表格,更重要的是理解和分析业务需求,以构建一个能够支持高效数据存储、检索和...

    MySQL 子查询(subquery)语法与用法实例.docx

    表子查询是指返回的结果集是 N 行 N 列,例如 `SELECT * FROM article WHERE (uid, username) IN (SELECT uid, username FROM user WHERE status=1)`。这种类型的子查询通常用于 EXISTS、IN 等操作符的右侧。 在 ...

    MySql基本查询、连接查询、子查询、正则表达查询讲解

    5、子查询 6、合并查询结果 7、为表和字段取别名 8、使用正则表达式查询 什么是查询? 怎么查的? 数据的准备如下: [sql] view plain copy create table STUDENT( STU_ID int primary KEY, STU_NAME char(10) ...

    SQL练习与答案3 视图与子查询

    在SQL中,视图和子查询是两种非常重要的概念,它们在数据管理和分析中起着至关重要的作用。本文将详细探讨这两个主题,并结合提供的练习题目给出解答。 首先,视图是一种虚拟表,它是由一个或多个SQL查询结果组成的...

    MySQL子查询的几种常见形式介绍

    IN子查询与ANY关键字相似,它将子查询的结果集作为条件范围。例如: ```sql select * from xxx where col in (select value from yyyy); ``` 这将返回主查询中col值存在于子查询结果集中的记录。 4. **EXISTS ...

    在MySQL中使用子查询和标量子查询的基本操作教程

    子查询是将一个 SELECT 语句的查询结果作为中间结果,供另一个 SQL 语句调用。MySQL 支持 SQL 标准要求的所有子查询格式和操作,也扩展了特有的几种特性。 子查询没有固定的语法,一个子查询的例子如下: SELECT *...

    98 MySQL是如何基于各种规则去优化执行计划的?(中).pdf

    当执行包含IN子查询的SQL语句时,例如 "SELECT * FROM t1 WHERE x1 IN (SELECT x2 FROM t2 WHERE x3 = xxx)",MySQL优化器会将执行计划优化,首先执行子查询,将结果物化成临时表,并在这个临时表上建立索引。...

    案例多对多子查询1

    上述案例中涉及的查询主要涵盖了多对多关系、子查询和聚合函数等概念,这些都是数据库设计和管理的基础知识。 1. **多对多关系**: 在案例中,学员、老师、课程之间存在典型的多对多关系,通常通过一个中间表(如...

    数据库SQL语言中的难点讨论.pdf

    它不同于其他单表查询,因为它不是直接对查询表进行行列筛选,而是将查询结果分组并进行聚合操作。GROUP BY关键字是实现分组查询的关键,它将查询结果分组,并将具有相同分组值的元组合并成一个组。 为了简单地阐明...

    mysql查询根据列按条件统计总数

    在统计分析中,子查询常用于先计算出中间结果,然后再基于这些结果进行进一步的处理。 ```sql SELECT * FROM ( SELECT 列1, COUNT(*) AS cnt FROM t1 GROUP BY 列1 ) AS sub UNION SELECT '总计', SUM(cnt) FROM ...

    MySQL优化之使用连接(join)代替子查询

    然而,当子查询涉及到大型数据集或者复杂的逻辑时,其执行效率可能会降低,因为这通常需要在内存中创建临时表来存储中间结果。例如,要找出没有订单记录的客户,可以使用如下子查询: ```sql SELECT * FROM ...

    MySql实现跨表查询的方法详解

    在这个例子中,子查询 `(SELECT c.order_id FROM `case`)` 用来找出所有存在于 `case` 表中的 `order_id`,然后主查询使用这些 `order_id` 来过滤 `orders` 表的记录。 除了JOIN和子查询,还有其他跨表查询技术,如...

    数据库课后习题答案.doc

    - **外层查询**:外层查询从`职工`表中选出那些不在子查询结果中的员工信息。 - **知识点**: - NOT IN关键字的用法。 - 单表查询与子查询的结合。 3. **题目(5)**:此题目要求查询出至少参加了任意一个...

    数据库SQL查询技术的优化策略.pdf

    子查询可以嵌套在SQL语句中提供临时结果集,而连接(JOIN)操作用于从多个表中检索数据。优化这两类操作通常包括: - 对于子查询,应当尽可能转换为JOIN操作,尤其是在子查询结果集较大时,因为部分数据库系统对JOIN...

    百万数据查询优化技巧三十则

    在进行子查询时,EXISTS通常比IN更高效,因为它一旦找到匹配项就会停止搜索。例如,`WHERE EXISTS(SELECT 1 FROM b WHERE num = a.num)`比`WHERE num IN (SELECT num FROM b)`更快。 ### 11. 选择正确的列类型 ...

    SQL查询实验[定义].pdf

    7. **子查询**:子查询是在一个查询语句中嵌套另一个查询语句,用于获取中间结果。例如,查询与"张雪"教师职称相同的教师信息,可以使用子查询来找出"张雪"的职称,然后在主查询中使用这个信息。ANY、IN和ALL谓词...

    SQLServer2000数据查询基础ppt和SQL查询代码

    6. **子查询**:子查询是在主查询内部的查询,可以用于设置条件或者获取中间结果。例如,`SELECT * FROM table_name WHERE column1 IN (SELECT column2 FROM another_table);`将返回table_name中column1值在another_...

    如何提高SQL查询效率

    在进行子查询时,使用 `EXISTS` 替代 `IN` 通常更为高效。 #### 14. 避免使用性别等固定值进行过滤 如果查询条件涉及性别等固定值,应当考虑是否真的有必要这样做。 #### 15. 优化INSERT和UPDATE操作 在执行大量的...

    SQL查询分析

    2. 避免子查询:子查询可能导致性能下降,尝试使用JOIN操作替代,或者通过临时表存储中间结果。 3. 减少数据返回量:只请求必要的字段,避免使用SELECT *,并考虑使用LIMIT限制返回行数。 4. 使用EXISTS而非IN:当...

    T-SQL高级查询

    查询表的时候,有时候中间表需要重复使用,这些子查询被重复查询调用,不但效率低,而且可读性低,不利于理解。那么公式表表达式可以解决这个问题。 我们可以将公式表表达式(CET)视为临时结果集,在select、...

Global site tag (gtag.js) - Google Analytics