查询多对多关系的数据时避免出现重复

2023-11-23 09:10

本文主要是介绍查询多对多关系的数据时避免出现重复,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

数据的关系有三种,一对一、一对多以及多对多。处理难度上多对多的关系的数据是最难处理的,多对多的关系一般用在一些类型上,例如一个客户对应多个客户类型,一个类型又可以对应多个客户,这样就形成了多对多关系了。多对多关系在查询数据时一般回查出多条数据,就例如上面的客户以及客户类型,一般显示到页面时每个客户只需要出现一次就行,但是又要显示出所有的客户类型。但是如何按一般的联表查询得到的结果就是该客户有多少个客户类型就会显示有多少条该客户的信息。就如下图所示,中谷新良这个客户有三个客户类型,而这个公司就出现了三遍。

       因为不需要客户出现多次,所有接着需要做的就是把重复的客户去除掉,把客户类型拼接起来集中显示到一条该客户的信息上。

    首先,要连表查询出每个客户的客户类型,也就是说每条数据都必须要有客户ID和客户类型两个字段。

       然后需要声明三个变量,一个是存放客户类型的,就是把每个客户的客户类型处理好了之后临时存放到这个变量里面;第二个是存放客户ID的,这个变量主要是用来筛选客户的,这是去重复了的核心代码;第三个变量是一个列表,把最终处理好的客户以及客户类型放到里面,供后续操作继续使用,是连接的桥梁。

    CustomerVo是实体类,自己创建的,内容根据实际添加。

    接着就可以对上面查询出来的数据进行处理了,处理时需要用到两个foreach循环,而且属于嵌套关系,循环的内容都是上面查询出来的每个客户的客户类型。第一个foreach循环是为了筛选客户的,第二个foreach循环是为了筛选客户类型的。先看看第二个foreach循环,一进去到第二个foreach循环就立马要进行判断,如果第一个循环的客户ID等于第二个循环的客户ID就可以进行客户类型的拼接,因为既然客户ID相等了那这个客户类型肯定就是该个客户的了。

    拼接完成后,就要对上面声明的几个变量进行处理,处理这几个变量的地方一定是要在第二个循环的外面,因为客户类型是要显示到页面上的,为了美观一般都会去掉最后一拼接的符号。

然后就要为列表添加数据了,客户类型添加的是第一个循环的客户ID,类型是拼接好的客户类型。添加完成后就要吧客户类型这个变量清空,避免影响下一次的操作。最后把客户ID拼接上,这时为了在第一个循环里进行判断是否已经处理过该客户。

    图中红色圈内的是筛选客户的操作,也就是去重复,首先要把拼接好的客户ID分割成数组形式,再利用Contains这个属性去判断该次的客户是否在该数组中,存在返回true,不存在返回false,如果存在就不进行任何操作,不存在就继续进行第二个循环。使用Contains一定要注意,该数组一定是一个字符串数组,而且前面要要IList这个属性,否则是使用不了的。

    然后就可以接着在下面正常的连表操作了,但是需要查询客户类型是就需要连处理好的那张表,就是listCustomerType这张。

 

    处理好之后就是这样子的

 

这篇关于查询多对多关系的数据时避免出现重复的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/416863

相关文章

SQL 中多表查询的常见连接方式详解

《SQL中多表查询的常见连接方式详解》本文介绍SQL中多表查询的常见连接方式,包括内连接(INNERJOIN)、左连接(LEFTJOIN)、右连接(RIGHTJOIN)、全外连接(FULLOUTER... 目录一、连接类型图表(ASCII 形式)二、前置代码(创建示例表)三、连接方式代码示例1. 内连接(I

Redis的数据过期策略和数据淘汰策略

《Redis的数据过期策略和数据淘汰策略》本文主要介绍了Redis的数据过期策略和数据淘汰策略,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录一、数据过期策略1、惰性删除2、定期删除二、数据淘汰策略1、数据淘汰策略概念2、8种数据淘汰策略

轻松上手MYSQL之JSON函数实现高效数据查询与操作

《轻松上手MYSQL之JSON函数实现高效数据查询与操作》:本文主要介绍轻松上手MYSQL之JSON函数实现高效数据查询与操作的相关资料,MySQL提供了多个JSON函数,用于处理和查询JSON数... 目录一、jsON_EXTRACT 提取指定数据二、JSON_UNQUOTE 取消双引号三、JSON_KE

查询SQL Server数据库服务器IP地址的多种有效方法

《查询SQLServer数据库服务器IP地址的多种有效方法》作为数据库管理员或开发人员,了解如何查询SQLServer数据库服务器的IP地址是一项重要技能,本文将介绍几种简单而有效的方法,帮助你轻松... 目录使用T-SQL查询方法1:使用系统函数方法2:使用系统视图使用SQL Server Configu

Python给Excel写入数据的四种方法小结

《Python给Excel写入数据的四种方法小结》本文主要介绍了Python给Excel写入数据的四种方法小结,包含openpyxl库、xlsxwriter库、pandas库和win32com库,具有... 目录1. 使用 openpyxl 库2. 使用 xlsxwriter 库3. 使用 pandas 库

SpringBoot定制JSON响应数据的实现

《SpringBoot定制JSON响应数据的实现》本文主要介绍了SpringBoot定制JSON响应数据的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们... 目录前言一、如何使用@jsonView这个注解?二、应用场景三、实战案例注解方式编程方式总结 前言

使用Python在Excel中创建和取消数据分组

《使用Python在Excel中创建和取消数据分组》Excel中的分组是一种通过添加层级结构将相邻行或列组织在一起的功能,当分组完成后,用户可以通过折叠或展开数据组来简化数据视图,这篇博客将介绍如何使... 目录引言使用工具python在Excel中创建行和列分组Python在Excel中创建嵌套分组Pyt

在Rust中要用Struct和Enum组织数据的原因解析

《在Rust中要用Struct和Enum组织数据的原因解析》在Rust中,Struct和Enum是组织数据的核心工具,Struct用于将相关字段封装为单一实体,便于管理和扩展,Enum用于明确定义所有... 目录为什么在Rust中要用Struct和Enum组织数据?一、使用struct组织数据:将相关字段绑

在Mysql环境下对数据进行增删改查的操作方法

《在Mysql环境下对数据进行增删改查的操作方法》本文介绍了在MySQL环境下对数据进行增删改查的基本操作,包括插入数据、修改数据、删除数据、数据查询(基本查询、连接查询、聚合函数查询、子查询)等,并... 目录一、插入数据:二、修改数据:三、删除数据:1、delete from 表名;2、truncate

MYSQL关联关系查询方式

《MYSQL关联关系查询方式》文章详细介绍了MySQL中如何使用内连接和左外连接进行表的关联查询,并展示了如何选择列和使用别名,文章还提供了一些关于查询优化的建议,并鼓励读者参考和支持脚本之家... 目录mysql关联关系查询关联关系查询这个查询做了以下几件事MySQL自关联查询总结MYSQL关联关系查询