将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...的一些注意以及多字段之间的模糊查询的更多相关文章

  1. 某表含有N个字段超精简模糊查询方法

    我们在做多个字段模糊查询时,是不是觉得非常麻烦?比如我要模糊查询某表多个字段存在某数据时,如下 select * from table where a like '%key%' or b  like ...

  2. 【摘录】某表含有N个字段超精简模糊查询方法

    SELECT * FROM  table where CONCAT(a,b,c......) like '%key%' select name from syscolumns where id=obj ...

  3. mysql数据库从删库到跑路之select单表查询

    一 介绍 本节内容: 查询语法 关键字的执行优先级 简单查询 单条件查询:WHERE 分组查询:GROUP BY HAVING 查询排序:ORDER BY 限制查询的记录数:LIMIT 使用聚合函数查 ...

  4. Oracle 表分组 group by和模糊查询like

    分组group by写法 select 字段名 from 表名 group by 字段名 查询这个字段名里的种类分组后可以加聚合函数select 字段名,聚合函数 from 表名 group by 字 ...

  5. 避免SQL全表模糊查询查询

    1.模糊查询效率很低: 原因:like本身效率就比较低,应该尽量避免查询条件使用like:对于like %...%(全模糊)这样的条件,是无法使用索引的,全表扫描自然效率很低:另外,由于匹配算法的关系 ...

  6. mysql关联模糊查询他表字段

    如下:订单表关联了用户的id(多个),要根据用户名模糊查询订单信息,但是订单表只有id.创建视图用不着,咱也没权限.于是如下 SELECT * FROM ( SELECT cu.id AS 'id', ...

  7. 避免SQL全表模糊查询查询 下载文件时-修改文件名字

    避免SQL全表模糊查询查询   1.模糊查询效率很低: 原因:like本身效率就比较低,应该尽量避免查询条件使用like:对于like %...%(全模糊)这样的条件,是无法使用索引的,全表扫描自然效 ...

  8. Oracle下批量将一个用户的所有表的select权限赋值给另外一个用户

    起因 为什么会有这篇文章呢? 因为最近在做项目的时候遇到一个问题...实际生产环境中程序datasource登陆的Oracle数据库用户user1不是我们创建的.这个用户没有访问我们业务表的权限(因为 ...

  9. select 多表查询

    连接查询实际上是通过各个表之间共同列的关联性来查询数据的,它是关系数据库查询最主要的特征. select 表1.字段名1,表2.字段名2,... from 表1,表2 where 连接条件 连接查询分 ...

  10. Oracle ——————建表、select、视图

    --建表 -- 关键字 : create -- 用法 : /* create table table_name ( lie1_name 数据类型 是否为空, lie2_name 数据类型 是否为空, ...

随机推荐

  1. 百度api经历

    底部参考文档,欢迎点击:https://www.runoob.com/http/http-content-type.html 这两天遇到了点糟心事,因为小伙伴走了.然后事情起因是这样的,来了个任务封装 ...

  2. 掌握 Kubernetes 故障排除技巧:kubectl命令的基本指南

    Kubernetes 彻底改变了容器编排,简化了应用程序的管理和扩展.然而,与任何复杂系统一样,Kubernetes 集群也会遇到问题,需要及时解决才能保持最佳性能和可靠性.在本文中,我们将深入探讨必 ...

  3. 【报错处理】npm WARN checkPermissions Missing write access to /usr/local/lib/node_modules/yarn

    一.报错现象 二.报错原因 权限不够 三.解决方法 加上sudo sudo npm install -g yarn

  4. 之字形打印二叉树—Java

    给定一颗二叉树,逐层打印,并且每层打印的方向是不一样的,比如: 逐层打印的结果是:1 3 2 4 5 6 8 7 代码: import java.util.ArrayList; import java ...

  5. 05.java多线程问题

    目录介绍 5.0.0.1 线程池具有什么优点和缺点?为什么说开启大量的线程,会降低程序的性能,那么该如何做才能降低性能? 5.0.0.3 线程中start和run方法有什么区别?wait和sleep方 ...

  6. 说说你对vue的mixin的理解,有什么应用场景?

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 一.mixin是什么 Mixin是面向对象程序设计语言中的类,提供了方法的实现.其他类可以访问mixin类的方法而不必成为其子类 Mixi ...

  7. 记录--Loading 用户体验 - 加载时避免闪烁

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 在切换详情页中有这么一个场景,点击上一条,会显示上一条的详情页,同理,点击下一条,会显示下一条的详情页. 伪代码如下所示: 我们定义了一个 ...

  8. 记录--Uniapp + TypeScript 配置文档

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 0 目标 使用 uniapp  + TypeScript 为基础栈进行小程序开发 uniapp 是一个使用 Vue.js 开发所有前端应用 ...

  9. 创建远程仓库&克隆项目(Github)

    创建远程仓库 在GitHub上注册一个账号,之后creat a new repository 创建的远程仓库把它看作一个百度网盘就可以了 克隆项目 1.远程仓库可以下载\克隆到本地 code :git ...

  10. MyBatis中的association与collection应用

    MyBatis中的association与collection应用 在使用 MyBatis进行数据库操作时,经常会遇到需要处理对象之间的关联关系和集合映射的情况.为了更好地实现对象关系映射,MyBat ...