`

关联查询 转换 成 IN 查询

阅读更多

遇到 主表 和 许多 关联表的 条件查询 问题 .

主表 之中只有 一条记录 ,但是关联的 附加表 可能存在多条 记录.

开始的时候 使用左连接 ,但是查询到 2 条数据.

 

select * from tpublicpolicy tp

left join Muster tm on tp.policyId = tm.policyId

XXXXXXXXXXXXXXXXX

 

然后,改成使用IN的子查询。

 

select * from tpublicpolicy tp

where tp.policyId in(

select policyId from Muster XXXXXXXXXX

)

XXXXXXXXXXXXXXX

 

成功查询。

 

最后还发现, IN 查询 比左连接快 。

 

但是,发现最后 填充 附加信息的时候 很耗时,因为是循环每个 保单去 添加 附加信息的。

 

但是Hibernate 之中之前没有 建立好关联, 不能自动 带出附加信息 。

 

为了 减少查询次数 ,想到 一次将所有的 数据全部查询出来。

 

也就是采用如下的方式 :

   //查询保障信息集合

   String hql = "from TPolicyEnsureTemporary where publicPolicyId in (:pidlist)";
   Query query = session.createQuery(hql);
   query.setParameterList("pidlist", pIdList);
   List<PolicyEnsureTemporary> ensureList = this.TPolicyEnsureTrVO(query.list());
   


 /**
  * 根据PolicyID从list获得保单保障临时表对象
  * 
  * @param policyId
  * @return rstList
  * @throws Exception
  */
 public List<PolicyEnsureTemporary> queryPolicyEnsureList (List<PolicyEnsureTemporary> ensureList, int policyId)
   throws Exception {
  List<PolicyEnsureTemporary> rstList = new ArrayList();
  if(null == ensureList || ensureList.size() <= 0){
   return rstList;
  }
  for(PolicyEnsureTemporary pe : ensureList){
   if(pe.getPublicPolicyId().equals(policyId)){
    rstList.add(pe);
   }
  }
  return rstList;
 }




 

 

 

到内存之中 去分拆 到每个 保单对象 。

 

这样 ,有几个 附加对象 就查询 几次 可以了 ,不用循环去查询耗费时间 。

 

 

分享到:
评论

相关推荐

    sql查询中行列转换

    ### SQL查询中的行列转换 在数据库管理中,经常会遇到数据结构需要调整的情况,尤其是当原始数据的排列方式与实际需求不一致时。本篇文章将详细解释如何通过一条SQL查询语句实现行列转换,并且会针对两种不同的SQL ...

    kettle实现SQL关联查询

    "Merge Join" Step就是其中之一,它允许用户实现类似SQL中的各种类型关联查询,包括INNER JOIN、LEFT JOIN、RIGHT JOIN以及FULL JOIN。 INNER JOIN是SQL中的一种基本联接类型,它返回两个表中存在匹配的记录。在...

    jpg图片转换成十六进制字符文件

    至于压缩包子文件的文件名称列表中的“J2F”,这可能是由于上传过程中的命名错误或者是某种特定的文件格式,但在这个上下文中,它并不直接关联到jpg图片转换成十六进制字符文件的过程。通常,这个步骤不会涉及其他子...

    dat坐标文件转in2平差文件.zip

    总的来说,这个压缩包提供的程序设计示例,不仅展示了dat文件与IN2文件格式间的转换技术,还涵盖了C++编程、VS与Qt的联合应用,以及平差计算的基本原理。对于学习GIS、测绘软件开发和数据处理的初学者,这是一个很好...

    格式化数据为想要的in条件的数据

    当我们需要用A表的某个字段做为条件去查询B表的数据时,如果逻辑简单的可以用in子句和left关联查询。当我逻辑很复杂,不适合写sql关联查时,可以使用该工具把A的查询结果格式化成逗号和分号分隔的语句,直接使用。 ...

    将文本文档无法分割排列的数据自动转换成excel表格形式

    假设我们的文本文档包含条码信息,我们可以使用条码扫描器或手机应用捕获条码,然后将其与转换后的Excel表格关联。条码可以作为唯一标识符,帮助我们定位和更新特定记录。例如,使用Python的`pyzbar`库可以解析条码...

    access数据库与mysql数据库转换

    6. **验证和测试**:转换完成后,进行全面的测试,确保所有数据已正确导入,查询和应用程序能够正常工作。可能需要调整SQL查询,因为MySQL可能支持不同的语法或函数。 7. **性能优化**:MySQL提供了一系列的性能...

    mysql子查询的用法

    为了提高查询性能,应考虑子查询的优化策略,如使用EXISTS代替IN,或者将大子查询转换为临时表。例如,使用EXISTS找到销售过至少一件商品的客户: ```sql SELECT customer_name FROM customers WHERE EXISTS ...

    A/D转换器的分辨率和准确度之间的区别

    TUE反映的是A/D转换器运行状况中下列各类非理想因素的联合效应:偏移误差(VOS)、增益误差和积分非线性(INL)误差。 四、影响A/D转换器总准确度的因素 A/D转换器的总准确度可能受到以下因素的影响: * 偏移误差...

    子查询课程实验

    - 联合子查询:将多个子查询的结果合并成一个结果集。 4. 子查询与连接(JOIN): - 子查询通常可以被JOIN操作替换,两者在某些场景下可互换,但子查询提供了一种更灵活的处理方式,尤其是在处理复杂的逻辑时。 ...

    Hibernate 函数 ,子查询 和原生SQL查询

    1. **IN/NOT IN操作符**:`from Entity e where e.id in (select id from AnotherEntity)`,这样的查询会找出存在于另一个实体的结果。 2. **比较操作符**:`from Entity e where e.value &gt; (select avg(value) ...

    GDAL读取Shapefile并将Shape转换成WKT

    Shapefile由一系列相互关联的文件组成,包括.shp(几何数据)、.dbf(属性数据)和.shx(索引)。GDAL提供了接口来操作这些文件,允许我们轻松地读取和写入Shapefile。 在C#中,使用GDAL进行操作通常需要引用OGR...

    mysql数据库In的优化.txt

    - 通过创建临时表可以将`IN`子句转换为更高效的表连接操作。 - 利用索引加速连接操作。 - 减少了需要比较的值的数量,从而提高了查询速度。 ##### 4.2 分批处理 1. **原理**: - 将`IN`子句中的值分成小批量...

    SQL查询相关技术(常用SQL查询技术、比较逻辑运算符查询、SQL关键字查询、表结构与性能、时间与谓词、聚合函数、子查询与连接查询、交叉表、常用数据操作高级应用、试图存储过程和触发器的使用)

    理解如何编写复杂的查询,如联合查询、嵌套查询和分组查询,是SQL的基础。 2. **比较逻辑运算符查询**:在SQL中,比较逻辑运算符如=、、&lt;、&gt;、、&gt;=以及BETWEEN、IN和NOT IN等用于筛选满足特定条件的数据。理解这些...

    通过GeoIP获取ip所属地,并将国家转换为中文

    本代码包聚焦于如何利用GeoIP服务获取IP地址的归属地,并将获取到的国家编码转换成中文名称。 首先,`GeoIP.dat`是GeoIP数据库文件,通常包含了全球IP地址到国家、地区等信息的映射。这个二进制文件由MaxMind公司...

    HBase多表关联查找资料

    * inmemory:表在内存中存放,可以提高查询速度,但需要注意内存使用率。 * bloomfilter:根据应用需求,判断是否需要精确到 rowkey 或 column, bloomfilter 可以对 region 下的 hfile 进行查询优化。 2. rowkey ...

    dicom和bmp转换程序

    DICOM(Digital Imaging and Communications in Medicine)是一种广泛用于医疗影像领域的数据交换标准,它包含了图像、病人信息、诊断注释等丰富的元数据。而BMP(Bitmap)则是一种常见的位图文件格式,常用于存储非...

    asp.net mvc多表查询的方法

    上面的SQL JOIN查询可以转换为以下LINQ查询: ```csharp using (var db = new YourDbContext()) { var result = (from u in db.Users join o in db.Orders on u.UserID equals o.UserID select new { User = u....

    ThinkPHP多表联合查询的常用方法

    在开发过程中,数据库查询是必不可少的操作,特别是在处理复杂的业务逻辑时,多表联合查询显得尤为重要。ThinkPHP作为一款流行的PHP框架,提供了多种方式进行多表联合查询。以下将详细讲解ThinkPHP中`table()`方法和...

Global site tag (gtag.js) - Google Analytics