Mysql 单表、连表 in 子查询条件拼接
- 一、代码
- 二、打印
- 1、$oneTableSql 打印
- 2、$joinTableSql 打印
一、代码
public function test() {$subSql = "select `user_id` from `score` where `type` = 1";//单表子查询$sql = "select * from `user` where `status` = 1";$oneTableSql = self::getInSubSql($sql, $subSql);echo $oneTableSql . '<br/>';//select * from `user` where id IN (select `user_id` from `score` where `type` = 1) AND `status` = 1//连表子查询$sql = "select * from `user` as `u` inner join `user_detail` as `ud` on `u`.`id` = `ud`.`user_id` where `u`.`status` = 1";$joinTableSql = self::getInSubSql($sql, $subSql, '`u`.`id`');echo $joinTableSql;//select * from `user` as `u` inner join `user_detail` as `ud` on `u`.`id` = `ud`.`user_id` where `u`.`id` IN (select `user_id` from `score` where `type` = 1) AND `u`.`status` = 1
}/*** IN 子查询 SQL 拼接* @param $sql 主sql* @param $subSql 子sql* @param string $field 主sql需要in的字段* @return string*/
function getInSubSql($sql, $subSql, $field = 'id') {if (empty($subSql)) {return $sql;}$interStr = 'WHERE'; //按照where字符串截取内容$index = strripos($sql, $interStr); //where所在的索引位置$length = mb_strlen($interStr); //where的长度$interBefore = substr($sql, 0, $index + $length); //where之前的内容(包含where)$whereSub = " {$field} IN ({$subSql}) AND "; //子查询条件$interLast = substr($sql, $index + $length);//where之后的内容(不包含where)$sql = $interBefore . $whereSub . $interLast; //拼接结果sql //子查询条件return $sql;
}
二、打印
1、$oneTableSql 打印
SELECT*
FROM`user`
WHEREid IN (SELECT`user_id`FROM`score`WHERE`type` = 1)
AND `status` = 1
2、$joinTableSql 打印
SELECT*
FROM`user` AS `u`
INNER JOIN `user_detail` AS `ud` ON `u`.`id` = `ud`.`user_id`
WHERE`u`.`id` IN (SELECT`user_id`FROM`score`WHERE`type` = 1)
AND `u`.`status` = 1
Mysql 单表、连表 in 子查询条件拼接相关推荐
- mysql 命令先执行子查询,MySQL必知必会--使用子查询
子查询 版本要求 MySQL 4.1引入了对子查询的支持,所以要想使用 本章描述的SQL,必须使用MySQL 4.1或更高级的版本. SELECT语句 是SQL的查询.迄今为止我们所看到的所有 SEL ...
- SQL优化之一则MySQL中的DELETE、UPDATE 子查询的锁机制失效案例
关注"数据和云",精彩不容错过 前言 开发与维护人员避免不了与 in/exists.not in/not exists 子查询打交道,接触过的人可能知道 in/exists.not ...
- Mysql进阶学习(六)子查询与分页查询
Mysql进阶学习(六)子查询与分页查询 进阶7:子查询 1.含义: 2.分类: 3.where或having后面 3.1 特点: 3.2.标量子查询★ 案例1:谁的工资比 Abel 高? 案例2:返 ...
- MySQL 子查询以字段作为子查询条件
SELECT *, tid AS aaa, ( SELECT uid FROM record WHERE tid = aaa AND win = 1 ORDER BY `value` DESC LIM ...
- mySQL学习记录(局域网连接/基础查询/条件查询/常见函数/窗口函数/表连接/子查询/插修删建表)
一些基础概念 DB 数据库 存储数据的容器 DBMS 数据库管理系统 又称数据库软件.产品如mysql/oracle/db2/sqlserver SQL 结构化查询语言 是所有的DBMS都使用的一种D ...
- mysql join子查询_MySQL的多表join中,子查询伤不起啊!
leader找到我,说下面的sql执行后cpu100%,但是这三张join的表数据量都在2W左右,不应该啊,是不是数据库服务器配置出了问题啊.sql如下: select a.excel_id, a.r ...
- Web程序员的Mysql进阶序三之sql多表数据删除、子查询、联合查询
假设表结构如下: create table test(name varchar(10),sex varchar(10) ); create table test1(name varchar(10),s ...
- Ollivander's Inventory(连接查询、单表双实例、子查询)
两张表 wands表:(id, code, coins_needed, power) wands_property表:(code, age, is_evil) 两张表通过code关联 查询要求: 1. ...
- java mysql单库多表_第69节:Java中数据库的多表操作
第69节:Java中数据库的多表操作 前言 学习数据库的多表操作,去电商行业做项目吧!!! 达叔,理工男,简书作者&全栈工程师,感性理性兼备的写作者,个人独立开发者,我相信你也可以!阅读他的文 ...
- mysql单源多表同步单库单表_MySQL主从复制单表或者多表
MySQL数据库安装不过多的介绍了:必须保证2个数据库的版本一致. 主数据库:192.168.0.43 从数据库:192.168.0.53 修改43主数据 MySQL数据库安装不过多的介绍了:必须保证 ...
最新文章
- 解决getOutputStream() has already been called for this response[java io流]
- AngularJs $resource 高大上的数据交互
- 关于Kanas.Net框架的一些背景
- Redis在SSM项目中的简单使用
- ubuntu编译内核重启出现:gave up waiting for root device
- python学习(1)
- codevs 1004 四子连棋 BFS、hash判重
- C#中yield return用法
- IDEA 社区版不支持 Tomcat?一招完美解决!
- Google开放最大目标检测数据集,还要为它举办AI挑战赛
- java8 nullpoint_仅当在Java8中使用lambda时不为null时才过滤值
- hl3150cdn打印不了照片_如何在美国打印证件照片 (Passport Photos)?
- js监听滚动条滚动事件
- 猪年适合学什么编程语言?
- 简述神经元网络控制的作用和特点
- 超好用的私人珍藏网站,送给你了!
- zabbix监控windows主机网卡流量
- 【Deblurring by Realistic Blurring】阅读笔记
- TRACERT-NBTSTAT-AT-NETSH 命令及用法
- Avamar 10007报错解决
热门文章
- 1005 Spell It Right (20)(20 分)
- 凸优化系列二:确定步长一维搜索算法
- python中对象排序的两种方式
- 次导数 次梯度 小结
- python部署到服务器上解析不到模块_在服务器上部署kafka-python包
- layui 下拉框多选数据_智慧职教mooc2020大数据基础课后答案
- 华北五省计算机应用大赛2018,2019年华北五省(市、自治区)及港澳台大学生计算机应用大赛举行...
- RedisTemplate常用使用说明-opsForHash(3)
- 20190226杂七杂八
- requests模块介绍