SELECT...FROM 表 a,( SELECT...FROM...WHERE...) tc...的一些注意以及多字段之间的模糊查询
将sql查询结果作为一个表来查询的时候的一些注意事项
因为工作,发现了这种sql的写法,但是有的时候感觉并不是自己想要的结果,自己试着玩了属于是
简单来说,这个查询并不是拼接结果的,而是将结果按照一个表来进行sql查询的
表结构,表数据如下
或者将表建好以后插入进去
INSERT INTO `test`.`cpcitemtest`(`itemid`, `itemcode`, `cpctest`, `cpcbom`) VALUES ('12321421', '1242142312', '43254634', '57658654');
INSERT INTO `test`.`testcpcbom`(`testid`, `itemid`, `cpcbomid`) VALUES (12345, '12', '54321');
运行下面的sql
SELECT
ct.itemid AS ct的itemid,
ct.itemcode AS ct的itemcode,
tc.itemid AS tc的itemid
FROM
cpcitemtest ct,(
SELECT t.*
FROM
testcpcbom t
WHERE
t.itemid LIKE '123%'
) tc
可以得到
但是运行下面的这段时
SELECT
ct.itemid AS ct的itemid,
ct.itemcode AS ct的itemcode,
tc.itemid AS tc的itemid,
td.itemid AS td的itemid
FROM
cpcitemtest ct,(
SELECT t.*
FROM
testcpcbom t
WHERE
t.itemid LIKE '1234567%'
) tc,
( SELECT a.* FROM testcpcbom a WHERE a.itemid LIKE '12%' ) td
结果却是
单独运行
SELECT a.* FROM testcpcbom a WHERE a.itemid LIKE '12%'
是有值的
但是
SELECT t.* FROM testcpcbom t WHERE t.itemid LIKE '1234567%'
是没有值的
说明在这种查询之中,有一个表查询出的结果为空时,切记不能放进总的查询中,会使查出的结果为空,即便别的有数据也没用
而且,将sql改成下面有结果的
SELECT
ct.itemid AS ct的itemid,
ct.itemcode AS ct的itemcode,
tc.itemid AS tc的itemid,
td.itemid AS td的itemid
FROM
cpcitemtest ct,(
SELECT t.*
FROM
testcpcbom t
WHERE
t.itemid LIKE '123456%'
) tc,
( SELECT a.* FROM testcpcbom a WHERE a.itemid LIKE '12%' ) td
结果(方便看,将ct中的itemcode改成了1和2)为
明明两个表中的数据都只有两行,为什么会出现四行的数据呢
再修改sql为
SELECT
ct.itemid AS ct的itemid,
ct.itemcode AS ct的itemcode,
tc.itemid AS tc的itemid,
td.itemid AS td的itemid
FROM
cpcitemtest ct,(
SELECT t.*
FROM
testcpcbom t
WHERE
t.itemid LIKE '123456%'
) tc,
( SELECT a.* FROM testcpcbom a WHERE a.itemid LIKE '123456%' ) td
结果为
此时结果又成为了两行数据
大概猜测:这种方法查出的结果是按照从第一个表开始查询,然后拿到结果,在查询第二个,在输出第二个查询的结果时,每一次输出结果都会将前面的结果带出来,以此类推,也就是说,如果第一个表中的结果有两行,第二的查询的结果有两行,第三个查询的结果有一行,则总的结果集就一共有2×2×1=4行结果,那么在所有的结果都能查出两行的时候,应该有8行结果
修改sql试试
SELECT
ct.itemid AS ct的itemid,
ct.itemcode AS ct的itemcode,
tc.itemid AS tc的itemid,
td.itemid AS td的itemid
FROM
cpctest ct,(
SELECT t.*
FROM
testcpc t
WHERE
t.itemid LIKE '12%'
) tc,
( SELECT a.* FROM testcpcbom a WHERE a.itemid LIKE '12%' ) td
结果8行
所以这个结果并不是拼接的,而是和普通sql一样
多字段之间的模糊查询
平常是使用like去模糊匹配一下固定的字段
但是有的时候并不能符合自己的需要,所以要查询字段的值
可以使用
A.ITEM LIKE '%'+B.ITEMID+'%'
以上
SELECT...FROM 表 a,( SELECT...FROM...WHERE...) tc...的一些注意以及多字段之间的模糊查询的更多相关文章
- 某表含有N个字段超精简模糊查询方法
我们在做多个字段模糊查询时,是不是觉得非常麻烦?比如我要模糊查询某表多个字段存在某数据时,如下 select * from table where a like '%key%' or b like ...
- 【摘录】某表含有N个字段超精简模糊查询方法
SELECT * FROM table where CONCAT(a,b,c......) like '%key%' select name from syscolumns where id=obj ...
- mysql数据库从删库到跑路之select单表查询
一 介绍 本节内容: 查询语法 关键字的执行优先级 简单查询 单条件查询:WHERE 分组查询:GROUP BY HAVING 查询排序:ORDER BY 限制查询的记录数:LIMIT 使用聚合函数查 ...
- Oracle 表分组 group by和模糊查询like
分组group by写法 select 字段名 from 表名 group by 字段名 查询这个字段名里的种类分组后可以加聚合函数select 字段名,聚合函数 from 表名 group by 字 ...
- 避免SQL全表模糊查询查询
1.模糊查询效率很低: 原因:like本身效率就比较低,应该尽量避免查询条件使用like:对于like %...%(全模糊)这样的条件,是无法使用索引的,全表扫描自然效率很低:另外,由于匹配算法的关系 ...
- mysql关联模糊查询他表字段
如下:订单表关联了用户的id(多个),要根据用户名模糊查询订单信息,但是订单表只有id.创建视图用不着,咱也没权限.于是如下 SELECT * FROM ( SELECT cu.id AS 'id', ...
- 避免SQL全表模糊查询查询 下载文件时-修改文件名字
避免SQL全表模糊查询查询 1.模糊查询效率很低: 原因:like本身效率就比较低,应该尽量避免查询条件使用like:对于like %...%(全模糊)这样的条件,是无法使用索引的,全表扫描自然效 ...
- Oracle下批量将一个用户的所有表的select权限赋值给另外一个用户
起因 为什么会有这篇文章呢? 因为最近在做项目的时候遇到一个问题...实际生产环境中程序datasource登陆的Oracle数据库用户user1不是我们创建的.这个用户没有访问我们业务表的权限(因为 ...
- select 多表查询
连接查询实际上是通过各个表之间共同列的关联性来查询数据的,它是关系数据库查询最主要的特征. select 表1.字段名1,表2.字段名2,... from 表1,表2 where 连接条件 连接查询分 ...
- Oracle ——————建表、select、视图
--建表 -- 关键字 : create -- 用法 : /* create table table_name ( lie1_name 数据类型 是否为空, lie2_name 数据类型 是否为空, ...
随机推荐
- F12 Preserve log 查看之前的api接口返回数据,只有火狐浏览器能用
F12 Preserve log 查看之前的api接口返回数据,只有火狐浏览器能用
- 摆脱鼠标系列 - 用git命令提交代码
需求 最近开始改变用鼠标的习惯,之前一直是用鼠标点击vscode,点击提交 现在不用鼠标,改用命令行,命令很简单,主要是习惯的改变 实现 vscode环境 ctrl + ` 快捷键打开命令行 git ...
- KETTLE4个工作中有用的复杂实例--2、两表数据比较,循环取数据,比较后自动同步(部门、单位数据同步)
附:Kettle实战视频教程,需要的朋友可以看看学习下哈~~ kettle实战第一讲-文件和数据库表的互相转换处理_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili kettle实战第二讲-数据库单 ...
- day02-SpringMVC映射请求数据
SpringMVC映射请求数据 1.获取参数值 在开发中,如何获取到 http://xxx/url?参数名1=参数值1&参数名2=参数值2 中的参数? 之前的案例中我们知道:提交的url的参数 ...
- 几个常用的cmd命令
compmgmt.msc 计算机管理 devmgmt.msc 设备管理器 diskmgmt.msc 磁盘管理工具 dfrg.msc 磁盘碎片整理 eventvwr.msc 事件查看器 fsm ...
- epoll水平触发与边缘触发
把高电平看作文件描述符是可读或可写状态,低电平黑色表示不可读或不可写,epoll_wait的水平触发就是蓝色的时候epoll_wait就会被触发,而边缘触发就是红色的时候epoll_wait会触发,且 ...
- Handler源码解析
Handler源码解析 一.基本原理回顾 在android开发中,经常会在子线程中进行一些操作,当操作完毕后会通过handler发送一些数据给主线程,通知主线程做相应的操作. 探索其背后的原理:子线程 ...
- 记录--啊?Vue是有三种路由模式的?
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 众所周知,vue路由模式常见的有 history 和 hash 模式,但其实还有一种方式-abstract模式(了解一哈~) 别急,本文我 ...
- .net core WPF关于进程打开网页链接报错"文件找不到"
System.Diagnostics.Process proc = new System.Diagnostics.Process(); proc.StartInfo.FileName = " ...
- 使用Go语言开发一个短链接服务:四、生成code算法
章节 使用Go语言开发一个短链接服务:一.基本原理 使用Go语言开发一个短链接服务:二.架构设计 使用Go语言开发一个短链接服务:三.项目目录结构设计 使用Go语言开发一个短链接服务:四.生成 ...