找回密码
 立即注册

QQ登录

只需一步,快速开始

Grayson.Shang 活字格认证 Wyn认证
超级版主   /  发表于:2024-8-14 18:04  /   查看:424  /  回复:0
本帖最后由 Grayson.Shang 于 2024-8-15 09:50 编辑

能看到这个帖子,说明你对控制查询策略是有好奇心的,那么这一篇帖子在剖析空值查询策略的原理上,再延伸出灵活的使用,帮助我们达成各种各样的查询需求。

空值查询测试是活字格9.0增加的功能,并在10.0中进行了完善,关于空值查询策略的原理,具体可以参考一下下面大佬的帖子,通过这篇帖子,就会了解空值查询策略,在具体查询数据的时候,做了什么?

彻底揭开查询条件中的“空值查询策略”面纱

做一个空值查询策略原理小结

1、空记录
当查询条件中,使用了公式,并且公式计算的结果是NULL,或者空字符串,那么当前的这一个条件则会变成一个恒为假(False)的条件
比如,当判断的字段类型为数值,提交就会变成 1 = 0
image.png201999816.png
当判断的字段类型为字符串(char),条件就会变成 字段名 = GUID
image.png678268127.png

2、全部记录
当查询条件中,使用了公式,并且公式计算的结果是NULL,或者空字符串,引用这个公式的条件在真实查询的时候会被删除掉,也就是不作数

3、值为空的记录
当查询条件中,使用了公式,并且公式计算的结果是NULL,或者空字符串,会在查询条件中,转成 字段 isnull,当然这一点不同的数据库语法不一定一样,原理是相同的

今天讲解的灵活应用,就是如何在一个条件中,灵活使用策略
首先描述一下需求场景
有一个文本输入框,可以对主表的字段做过滤筛选,若是主表字段过滤不到数据,则在子表的字段中进行过滤,
若是子表过滤到了数据,那么反过来过滤子表中可以过滤出数据的主表数据,
若是子表过滤不到数据,那么主子表都将不展示数据

需求场景有些绕,放在实际需求中,就是一个输入框,主子表都可以查询,这样就相对好理解一些了。先看演示结果。
查询策略灵活使用演示.gif735339355.png
通过演示,先可以看到,当切换上面主表的当前行时,下面的子表是可以会展示对应的数据
当输入框,输入的是主表字段的值,那么主表过滤,子表还是根据过滤后的主表当前行查询数据
当输入框,输入的是子表字段的值,那么主表只会展示子表中可以过滤出来的数据,并且切换数据,可以展示对应主表下的子表数据。

好了,了解了场景之后,我们聊一下如何实现这个场景。
问题的难点:子表中需要增加一个“子表字段 包含指定字符串 目标单元格”的一个查询条件,但是当主表可以查询到数据时,这个条件不能生效,当主表查询不到数据时,这个条件才可以生效。

实现思路:需要再子表查询生效之前,使用命令确认一下主表是否可以查询到数据,若是可以查询,则返回0,否则返回查询的行数
在子表查询条件中,将空值查询策略设置成“全部记录”,因为全部记录,可以做到让一个“条件消失”。

具体设计如下:
在值单元格中,做一个IF公式判断,判断的单元格是前面主表查询行数的值,若值为0,返回文本框的值,若值不为0,则返回空字符串。
image.png819631957.png
小提示:这里有一个问题需要注意,空值策略中的公式并不只是整个IF公式,还包括公式中引用的单元格,若是单元格值为空,那么条件也会消失,这设计的时候,尽量保证应用的单元格值不为空(设置默认值,通过其他命令修改值,命令修改值若是空值改成对应的值,比如0),逻辑也会更加简单可控。

原理解析
当主表查询行数值为0,说明需要子表查询,那么就可以通过文本 包含指定字符串 文本,完成过滤筛选
当主表查询行数值不为0,说明不需要子表再做查询,那么通过赋值空字符串 + 空值查询策略——全部记录,就会在真实查询的时候,将当前条件去除,完成查询。

若是想要详细了解这个场景的,可以参考demo。

通过这个场景,不知道大家对于空值查询策略是不是有了更深的理解呢?

空值查询策略灵活使用demo.fgcc (227.04 KB, 下载次数: 31)

0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部