我这个SQL语句进行多表联查时为啥关联字段查不出来?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我这个SQL语句进行多表联查时为啥关联字段查不出来?相关的知识,希望对你有一定的参考价值。

select news.*, states.ColumnName, states.NewsTypeName, releases.releaseName from news left join states on news.ColumnsId = states.StateId and news.NewsType = states.StateId left join releases on news.Status = releases.releaseId;

由于是左连接(left join),当右边表(states,releases)有而左边表没有的记录会查不出来;而左边有,右边没有的,右边表的信息会显示空白(null)。 参考技术A 哪个关键字段?

也许是left join的缘故,或者换full join 试试
参考技术B 将LEFT换成INNER试试看

不知道你要的最终结果是怎么样的

结合真实的测试实例,记录一次SQL语句辅助功能测试的场景(包含多表联查及子查询)

本文结合实例讲解一下 SQL 语句通过数据库辅助进行功能测试。希望阅读本文的小伙伴,能通过这个场景实例体会到SQL 语句在真实的功能测试时起到的作用

本次功能测试涉及的sql 知识点如下:

1 SELECT 查询

2 where 子句

3 count()

4 to_char()

5 group by

6 order by

7 两表联查(这里涉及left join)

8 子查询嵌套

 

实例中的需求文档 :

技术分享图片

 

 

系统的测试界面:(不好意思,写文章的时候,想去截一个好一点的图片,测试环境无法登录了)

技术分享图片

前提解释:

这个报表展示的对所有流程的延时次数和审批次数的统计结果。

由于流程数据没有办法通过前台报表统计验证, 在测试的时候要借助于数据库进行查询验证。

思路:

1  查询出按4列字段分组统计的审批次数

2 查询出按4列字段分组统计的延时次数

3 分别验证界面展示和查询结果是否一致

4 验证降序排列(用order by 语句排序验证结果顺序和界面是否一致)

 

扩展:

通过两表联查将审批次数,延时次数合并在一个结果里(left join 用法 及子查询嵌套)

(其实完成单句查询也能完成本次功能的验证,时间允许也为了强化两表查询及子查询嵌套功能的运用,增加语句扩展)

 

语句及运行结果:

审批次数:

技术分享图片

 延时次数:

技术分享图片

 

 

 

 

 

两表联查及子查询(left join)

之所以选择left join 是因为 右表 延时次数 的统计范围比 左表 审批次数 要窄,流程总表里的数据每一条都会被分组统计到 审批次数, 但是 只有 IS_TIMEOUT 这个字段为true 的才会统计

比如一个分组行中 该字段全是false 就是空所以看到延时数据 有的是null

技术分享图片

以上是关于我这个SQL语句进行多表联查时为啥关联字段查不出来?的主要内容,如果未能解决你的问题,请参考以下文章

多表联查时的sql删除语句的写法,即级联删除,将相关联的数据级联删除

SQL语句UPDATE 多表关联的

多表关联UPDATE语句怎么写呀?

Java mysql 多表联查 与循环查询组装数据

select 多表关联查询

如何进行sql多表查询?