mysql多对多查询 原生写法
准备工作,1.创建表
CREATE TABLE IF NOT EXISTS `users` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`name` VARCHAR() NOT NULL,
PRIMARY KEY (`id`)
) ENGINE = InnoDB CHARSET = utf8mb4; CREATE TABLE IF NOT EXISTS `applications` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`systemName` VARCHAR() NOT NULL,
PRIMARY KEY (`id`)
) ENGINE = InnoDB CHARSET = utf8mb4; CREATE TABLE IF NOT EXISTS `user_application` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`applicationId` INTEGER NOT NULL,
`userId` INTEGER NOT NULL,
`type` TINYINT,
UNIQUE `user_application_applicationId_userId_unique` (`applicationId`, `userId`),
PRIMARY KEY (`id`)
) ENGINE = InnoDB CHARSET = utf8mb4;
2.创建数据
INSERT INTO `users` (`name`) VALUES ('张三'),('李四'),('老王'),('小明'),('涛哥');
INSERT INTO `applications` (`systemName`) VALUES ('mac'),('windows'),('linux'),('android'),('qilin');
INSERT INTO `user_application` (`applicationId`,`userId`,`type`) VALUES (,,),(,,),(,,),(,,),(,,);
3.使用多对多 关联查询... 一个用户可以有多个应用,一个应用对应多个用户
查询“张三”下应用:
SELECT users.id, users.name, user_application.type, applications.systemName
FROM users
LEFT JOIN (user_application `user_application`
INNER JOIN applications `applications` ON user_application.applicationId = applications.id) ON users.id = user_application.userId
WHERE users.name = '张三'
查询“windows”下用户:
SELECT applications.systemName, users.name, user_application.type
FROM applications
LEFT JOIN (user_application `user_application`
INNER JOIN users `users` ON user_application.userId = users.id) ON applications.id = user_application.applicationId
WHERE applications.systemName = 'windows'
mysql多对多查询 原生写法的更多相关文章
- Entity Framework 多对多查询的写法
同学们,看下面的代码段就明白了: 一对多: public ICollection<ReportLookup> GetReportLookup(IEnumerable<Guid> ...
- MYSQL随机抽取查询 MySQL Order By Rand()效率问题
MYSQL随机抽取查询:MySQL Order By Rand()效率问题一直是开发人员的常见问题,俺们不是DBA,没有那么牛B,所只能慢慢研究咯,最近由于项目问题,需要大概研究了一下MYSQL的随机 ...
- mysql笔记03 查询性能优化
查询性能优化 1. 为什么查询速度会慢? 1). 如果把查询看作是一个任务,那么它由一系列子任务组成,每个子任务都会消耗一定的时间.如果要优化查询,实际上要优化其子任务,要么消除其中一些子任务,要么减 ...
- MySQL多表查询之外键、表连接、子查询、索引
MySQL多表查询之外键.表连接.子查询.索引 一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标识一条记录,不能有重复的,不允许为 ...
- mybatis(一、原理,一对多,多对一查询)
MyBatis框架及原理分析 MyBatis 是支持定制化 SQL.存储过程以及高级映射的优秀的持久层框架,其主要就完成2件事情: 封装JDBC操作 利用反射打通Java类与SQL语句之间的相互转换 ...
- mybatis结合mysql批量操作及查询sql
MySQL数据库 批量操作主要使用的是Mybatis的foreach,遍历参数列表执行相应的操作,所以批量插入/更新/删除的写法是类似的,只是SQL略有区别而已.MySql批量操作需要数据库连接配置a ...
- MyBatis多对多查询
-------------------siwuxie095 MyBatis 多对多查询 以订单和商品为例,即 一个订单可 ...
- MySQL多表查询回顾
----------------------siwuxie095 MySQL 多表查询回顾 以客户和联系人为例(一对多) 1.内连接 /*内连接写法一*/ select * from t_custom ...
- 基于对象的跨表查询,多对多查询,多对多操作,聚合查询和分组查询,F查询和Q 查询
基于对象的跨表查询 一对多查询(班级表和学生表) 表结构创建 class Class(models.Model): id = models.AutoField(primary_key=True) cn ...
随机推荐
- 【学习总结】快速上手Linux玩转典型应用-第2章-linux简介
课程目录链接 快速上手Linux玩转典型应用-目录 目录 1. 什么是Linux 2. Linux能够做什么事情 3. Linux的学习方法 4. 忘掉Windows的所有东西 1. 什么是Linux ...
- VSCode配置 Debugger for Chrome插件
Debugger for Chrome这个插件是直接在vscode里面进行调试js文件,跟谷歌的控制台是一样的功能,下载了它就不用打开浏览器的控制台就能进行打断点. 首先在左侧扩展栏找到这个插件下载好 ...
- django基础篇03-阶段总结
1.django的生命周期: url -> 路由系统 -> 视图函数(获取模版 + 数据 =>渲染) -> 返回字符串 2.路由系统: /index/ ->函数或类.as ...
- MySQL索引面试题分析(索引分析,典型题目案例)
[建表语句] create table test03( id int primary key not null auto_increment, c1 char(10), c2 char(10), c3 ...
- /etc/nscd.conf - 域名服务缓存守护进程配置文件
描述 DESCRIPTION 该文件 /etc/nscd.conf 在启动 nscd(8) 时读入.每一行或者指定一个属性和值,或者指定一个属性.服务和一个值.域之间通过空格或者TAB分开.‘#’表示 ...
- Docker学习笔记--传送门(持续更新)
1.ubuntu下安装docker: https://www.cnblogs.com/salmonLeeson/p/11609699.html 2.为docker配置国内镜像加速器:https:// ...
- Thinking in Annotation
Thinking in Java这本书很久前就购买了,打算有时间看一下,因为自己的时间被自己安排的紧张,也没时间看书.黄师傅上次课程讲到了注解的使用和反射的使用,今天打算学习一下注解.该文章参考Thi ...
- windows用ffmpeg实现视频剪切
1.安装ffmpeg 从官网下载适合自己版本的FFmpeg,网址是http://ffmpeg.org/download.html,在get the packages中点击windows builds ...
- python文件读写详解
# Python3 open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, ...
- Spring AOP注解配置demo
https://blog.csdn.net/yhl_jxy/article/details/78815636#commentBox