将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. eclipse错误之Could not write metadata for "xxx"

    Could not write metadata for '/test'. 这是由于删除一个项目时,没有同时在硬盘上删除该项目,而后又到硬盘文件系统中删除了该项目,才出现这问题的. 到eclipse工 ...

  2. C++类的访问权限

    首先明确一个类的用户有三种: 一类用户:类的成员和友元 二类用户:子类的成员及子类的友元 三类用户:外部的用户代码(通过类的对象或指针) 一个类有三种成员 private:只有一类用户可以访问priv ...

  3. Ubuntu 16.04 配置NFS

    PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明   本文作为本人csdn blog的主站的备份.(Bl ...

  4. centos如何换源

    centos如何换源? 万事先备份 mkdir -p /etc/yum/backup/ cp -r /etc/yum.repos.d/* /etc/yum/backup/ 1.将源文件备份 cd /e ...

  5. 3DCAT为华东师大设计学院打造元宇宙数字虚拟学院

    6月11日,华东师范大学设计学院在chi K11美术馆举办了一场别开生面的 2023 年本科毕业设计暨项目实践教学现场演示展.其中,元宇宙数字虚拟学院(一期)的现场发布会引起了现场震撼,吸引了众多观众 ...

  6. python面向对象编程(封装、隐藏)

    一 封装 1.封装介绍封装是面向对象三大特性最核心的一个特性封装<----->整合2.将封装的属性进行隐藏操作1).如何隐藏:在属性名前加__前缀,就会实现一个对外隐藏属性效果该隐藏需要注 ...

  7. 笔记:vite 的启动链路以及背后的部分原理

    这里分享一篇找到的文章 原文地址:https://blog.csdn.net/frontend_frank/article/details/106632197 NO.1 vite 是什么 vite - ...

  8. 【论文项目复现1】漏洞检测项目复现_VulDeeLocator

    复现环境 Ubuntu 20.04 CPU: 32G GPU: 11G 2080ti Source2slice: clang-6.0 + llvm + dg (dg: https://github.c ...

  9. modelsim的工程文件结构

    modelsim的工程文件结构 1.工程结构 modelsim中的工程包括一个库(这个库可以是空的,也可以包含器件延时信息的真实库),一个工程(以mpf为后缀的文件是工程的快捷打开方式)和若干源文件. ...

  10. Scala Reduce操作(简化归约)reduce和fold

    1 package chapter07 2 3 object Test15_HighLevelFunction_Reduce { 4 def main(args: Array[String]): Un ...