找回密码
 立即注册

QQ登录

只需一步,快速开始

guoqp

银牌会员

243

主题

912

帖子

2227

积分

银牌会员

积分
2227

时代开发者征文活动

guoqp
银牌会员   /  发表于:2023-3-29 23:24  /   查看:3000  /  回复:2
相信有不少小伙伴都跟我有一样的困惑,新版活字格中有个“查询条件策略”的选项,其中选项有:全部记录、空记录、值为空的记录,它们到底有什么区别,如果你不清楚这其中的区别可能会掉进坑里,我就是深受其害,今天在此彻底揭开它的真面目。

首先,我们建立一个测试环境,模拟各种值为NULL与空的情况,事实证明这都是多余的。
image.png613583373.png image.png42871092.png

上服务端命令,因为这个方便测试看结果
image.png439288024.png image.png152179564.png
第一种策略:空记录
确定后我们测试,直接传条件为空
image.png559684447.png
我们可以看到筛选条件中的空字符串与NULL被替换成了GUID值,这意味着什么?当然意味着永远不可能出结果啦
我们再传入一个参数试试
image.png510951842.png
再次确认了只要我们传入的条件是空字符串或者NULL值都会被替换成GUID值
结论:“空记录”策略代表只要有一个参数是空字符串或者NULL,那查询结果就永远没有结果,也就是空记录,看到这个结果是不是觉得傻,人家都写得清清楚楚了,“空记录”策略当然返回空记录啦,但真的很多小伙伴就是不知道这个空记录到底会怎样,希望这里能让你明白吧。

第二种策略:“全部记录”,下边我直接上测试图
image.png529774169.png image.png904317321.png image.png732650451.png
这里我们发现条件为空字符串或者NULL时,活字格直接把我们的条件给删除掉了,也就是直接无视这个无条件,那带来的结果当然就是返回全部记录啦,因为条件都被删除了,懂点SQL的都知道没有条件了肯定返回的就是全部记录啦
结论:“全部记录”策略代表传入条件值为空白字符串或者NULL值时,这个条件将直接被忽略,也就是返回全部SELECT结果,与字面意思完全一致,就是返回全部记录。

第三种策略:“值为空的记录”
image.png489954223.png image.png906250915.png image.png659173888.png
通过观察发现上边我们传入的空字符串或者NULL值被替换成了“=空字符串”或者“IS NULL”,也就是说返回的结果直接覆盖了值为空或者NULL两种情况
结论:“值为空的记录”策略就是将我们传的空值替换成了“空字符串”或者"IS NULL",同样是顾名思义,返回的就是值为空的记录

也许有些小伙伴看了半天还是一头雾水,感觉这说了跟没说一样,可能我的语文水平有限,真的不知道如何表达了,写到这里我也理解活字格工程师为啥要这样命名了,因为这已经是最精简最直接最直观的表达了,只怪我们没能理解那几个字代表的就是”返回结果“,而非是过程的处理。

再总结一下,这三个策略我个人认为”全部记录“与”值为空的记录“策略更为常用,”空记录“策略感觉不太常用,你们觉得呢

评分

参与人数 4金币 +1332 满意度 +10 收起 理由
九易六 + 5
Nancy.Yin + 666 赞一个!
小侠米 + 5
Grayson.Shang + 666

查看全部评分

2 个回复

倒序浏览
老秋
金牌服务用户   /  发表于:2023-3-30 10:54:24
沙发
说的很清楚了
回复 使用道具 举报
林小鱼
金牌服务用户   /  发表于:2024-9-12 08:47:20
板凳
image.png601437987.png

三种策略 都在将 查询条件的值为公式且...
我就在思考 先是公式,那查询条件那里 放啥 是公式?变量?固定值?算公式吗?我就没懂了。
依然困惑中
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部