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 数据类型 是否为空, ...
随机推荐
- sign 单词学习 - 本质:去分开
sign 英[saɪn],美[saɪn] n. 符号; 指示牌; 手势; 征兆; 正负号; 星座 v. 签名; 签约; 打手语 词源说明(童理民) sign : 来自拉丁语signum,符号,标志,图 ...
- stable diffusion安装及使用
最近在看这个,踩了一些坑,现在有点头绪了,记录如下 安装很简单,直接git下载下来,然后进到根目录执行./web-ui.py,第一次启动你没有模型他会帮你下载个默认模型,我有模型了,就先把这个模型放到 ...
- 一种OSD 简单实现 (文字反色---opencv、字体切换---freetype2(中文、空格))
PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明 本文作为本人csdn blog的主站的备份.(Bl ...
- PAT 甲级【1010 Radix】
本题范围long型(35)^10 枚举radix范围上限pow(n/a0,1/m)上,考虑上限加1.范围较大.使用二分查找枚举 代码如下 import java.io.BufferedReader; ...
- 自定义MarkupExtension的学习,以及WPF中Combobox绑定枚举类型
我们上一期讲到ComBobox绑定数据,https://www.cnblogs.com/guchen33/p/17630808.html 这次我们简单化一下, 正常来讲WPF中绑定不了枚举的像这样 / ...
- 记录--Vue中前端导出word文件
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 很多时候在工作中会碰到完全由前端导出word文件的需求,因此特地记录一下比较常用的几种方式. 一.提供一个word模板 该方法提供一个wo ...
- r-nacos v0.4.0版本发布
r-nacos是一个用 rust重新实现的nacos. r-nacos比java实现的nacos更轻量.快速.稳定:合适在开发.测试.受资限服务等环境平替nacos服务使用. r-nacos v0.4 ...
- js中订阅发布模式bus
export default { list: {}, // 事件中心集中地 /** * 发布订阅 * @param {string} name 事件名 * @param [...args] */ $e ...
- RepPointsV2:更多的监督任务,更强的性能 | NIPS 2020
RepPointsV2的整体思想类似与Mask R-CNN,加入更多的任务来监督目标检测算法的学习.虽然在创新性上可能不够新颖,但论文的通用性还是很不错的,而且将角点任务的输出用于联合推理,从对比实验 ...
- KingbaseES数据库适配Activiti7 didn't put process definition问题处理过程
一.Activiti介绍 Activiti是一个轻量级的java开源BPMN 2工作流引擎.目前以升级至7.x,支持与springboot2.x集成. 二.项目环境 Spring Boot版本2.2. ...