MSSQL数据库一对多和多对一查询的转换
前言
处理一对多关系,有两种方式
(1)创建关系表,将对应关系保存在物理表中。
(2)表中添加一个字段,将多关系的值以特殊符号隔开进行保存.
本例使用的就是,以逗号隔开(InterestID='1,2,3,4')
示例语句
测试数据表的创建语句
--学生表
CREATE table Student
(
Name nvarchar(50),--姓名
InterestID varchar(50)--兴趣编号
)
--基础信息表
CREATE table BaseInfo
(
InterestID int,--兴趣编号
InterestName varchar(10)--兴趣名称
) --测试数据
insert INTO BaseInfo
SELECT 1,'乒乓球'
UNION
SELECT 2,'篮球'
UNION
SELECT 3,'足球'
UNION
SELECT 4,'网球'
UNION
SELECT 5,'羽毛球' --一对多关系示例数据
INSERT INTO Student
SELECT '李健康','1,3,4'
UNION
SELECT '方时赫','2' --一对一关系示例数据
INSERT INTO Student
SELECT 'Mike','1'
UNION
SELECT 'Mike','2'
UNION
SELECT 'Mike','4'
查询方式
(1)字段中保存多个值(一条记录对应多条记录),关联仍为一条数据
SELECT a.Name,a.InterestID
,InterestName=
STUFF
(
(
SELECT ','+LTRIM(b.InterestName)
FROM BaseInfo b
WHERE CHARINDEX(','+LTRIM(b.InterestID),','+a.InterestID)>0 FOR XML PATH('')
)
,1,1,''
)
FROM Student a
原结果集:
Name InterestID
李健康 1,3,4
方时赫 2
关联结果集:
Name InterestID InterestName
李健康 1,3,4 乒乓球,足球,网球
方时赫 2 篮球
(2)字段中保存多个值(一条记录对应多条记录),关联为多条数据
SELECT x.Name,y.InterestID FROM
(
SELECT Name
,InterestID = CONVERT(xml,'<root><v>' + REPLACE(InterestID, ',', '</v><v>') + '</v></root>')
FROM Student
) x
OUTER APPLY
(
SELECT InterestID = N.v.value('.', 'varchar(100)') FROM x.InterestID.nodes('/root/v') N(v)
) y
原结果集:
Name InterestID
李健康 1,3,4
方时赫 2
关联结果集:
Name InterestID
李健康 1
李健康 3
李健康 4
方时赫 2
(3)字段中保存一个值,关联为一对多的关系
select Name,
stuff
(
(
select ','+ InterestID from Student as b where b.Name = a.Name for xml path('')
)
,1,1,''
) as InterestID
from Student as a
group by Name
原结果集:
Name InterestID
李健康 1,3,4
方时赫 2
Mike 1
Mike 2
Mike 4
关联结果集:
Name InterestID
Mike 1,2,4
方时赫 2
李健康 1,3,4
MSSQL数据库一对多和多对一查询的转换的更多相关文章
- mybatis(一、原理,一对多,多对一查询)
MyBatis框架及原理分析 MyBatis 是支持定制化 SQL.存储过程以及高级映射的优秀的持久层框架,其主要就完成2件事情: 封装JDBC操作 利用反射打通Java类与SQL语句之间的相互转换 ...
- SpringBoot使用Mybatis注解进行一对多和多对多查询(2)
SpringBoot使用Mybatis注解进行一对多和多对多查询 GitHub的完整示例项目地址kingboy-springboot-data 一.模拟的业务查询 系统中的用户user都有唯一对应的地 ...
- Python之路第十三天,高级(7)-详述数据库一对多,多对多表关系的设计以及如何查询
一对多表设计和查询方法 #!/usr/bin/env python3 # Author: Zhangxunan from sqlalchemy import create_engine from sq ...
- mybatis学习记录六——一对一、一对多和多对多查询
9 订单商品数据模型 9.1 数据模型分析思路 1.每张表记录的数据内容 分模块对每张表记录的内容进行熟悉,相当 于你学习系统 需求(功能)的过程. 2.每张表重要的字段设置 非空 ...
- day03-Mybatis中一对一、一对多、多对多查询
一对一查询 一对一的表结构: my_account表: my_user表: 一对一是互相的,A可以找到B,B也可以找到A,方法是一样的,这里就只写一个方向的 通过my_count表找到my_user表 ...
- MySQL数据库 crud语句 ifnull() 创建新账户 备份数据库 一对多关系 多对多(中间表) 外键约束 自关联 子查询注意事项 DML DDL DQL mysql面试题 truncate与delete的区别
DML(data manipulation language): 它们是SELECT.UPDATE.INSERT.DELETE,就象它的名字一样,这4条命令是用来对数据库里的数据进行操作的语言 DDL ...
- Mybatis一对一、一对多、多对多查询。+MYSQL
场景:使用三张数据表:student学生表.teacher教师表.position职位表 一个学生可以有多为老师.一位老师可以有多个学生.但是一个老师只能有一个职位:教授.副教授.讲师:但是一个职位可 ...
- mybatis+oracle实现一对多,多对一查询
首先创建表 学生表 create table stu( id number(11) primary key, name varchar2(255), age num ...
- 数据库表设计时一对一关系存在的必要性 数据库一对一、一对多、多对多设计 面试逻辑题3.31 sql server 查询某个表被哪些存储过程调用 DataTable根据字段去重 .Net Core Cors中间件解析 分析MySQL中哪些情况下数据库索引会失效
数据库表设计时一对一关系存在的必要性 2017年07月24日 10:01:07 阅读数:694 在表设计过程中,我无意中觉得一对一关系觉得好没道理,直接放到一张表中不就可以了吗?真是说,网上信息什么都 ...
随机推荐
- python的os命令
os常用命令 os.sep:取代操作系统特定的路径分隔符 os.name:指示你正在使用的工作平台.比如对于Windows,它是'nt',而对于Linux/Unix用户,它是'posix'. os.g ...
- 蓝桥杯——复数幂 (2018JavaAB组第3题)
18年Java蓝桥杯A组第3题和B组是一样的. 第三题往往比较难. 复数幂 (18JavaAB3) (A.B两卷第三题一样) 设i为虚数单位.对于任意正整数n,(2+3i)^n 的实部和虚部都是整数. ...
- 音乐制作:用FL Studio做电子音乐
电音制作,自然少不了适合做电音的软件,市面上可以进行电音制作的软件不少,可是如果在这些软件中只能选择一款的话,想必多数人会把票投给FL Studio,毕竟高效率是永远不变的真理,今天就让我们来看看如何 ...
- JDK7HashMap
JDK7HashMap 成员变量 HashMap中定义了非常多的成员变量以及常量,各成员变量含义具体如下: //默认初始化长度-16 static final int DEFAULT_INITIAL_ ...
- 自动化运维工具之Puppet常用资源(二)
前文我们了解了部分puppet的资源的使用,以及资源和资源的依赖关系的定义,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/14071459.html:今天我们继 ...
- 使用Verilog搭建一个单周期CPU
使用Verilog搭建一个单周期CPU 搭建篇 总体结构 其实跟使用logisim搭建CPU基本一致,甚至更简单,因为完全可以照着logisim的电路图来写,各个模块和模块间的连接在logisim中非 ...
- NOIp2020游记
Day 1 考点还是在南航,第三次去已经没有什么新鲜感了,满脑子都是NOIp能不能考好.考前奶了一波这次必考最短路,于是在试机的时候打了一遍Dij和SPFA的板子,信心满满的上场了. 考试右后方是Ki ...
- 转:浅谈HTTP中Get、Post、Put与Delete的区别
1.GET请求会向数据库发索取数据的请求,从而来获取信息,该请求就像数据库的select操作一样,只是用来查询一下数据,不会修改.增加数据,不会影响资源的内容,即该请求不会产生副作用.无论进行多少次操 ...
- 手写mini版MVC框架
目录 1, Springmvc基本原理流程 2,注解开发 编写测试代码: 目录结构: 3,编写自定义DispatcherServlet中的初始化流程: 3.1 加载配置文件 3.2 扫描相关的类,扫描 ...
- metasploit魔鬼训练营靶机环境搭建(第二章)
环境搭建,书上已经很详细了,路由转发的那个鼓捣了好久都没弄好,菜的啊 所以先往书后面继续学习,不停留在配置环境上了. backtrack没有下载,使用的kali linux 其他的都是一样的 百度网盘 ...