guoqp 发表于 2023-3-29 23:24:14

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

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

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


上服务端命令,因为这个方便测试看结果

第一种策略:空记录
确定后我们测试,直接传条件为空

我们可以看到筛选条件中的空字符串与NULL被替换成了GUID值,这意味着什么?当然意味着永远不可能出结果啦
我们再传入一个参数试试

再次确认了只要我们传入的条件是空字符串或者NULL值都会被替换成GUID值
结论:“空记录”策略代表只要有一个参数是空字符串或者NULL,那查询结果就永远没有结果,也就是空记录,看到这个结果是不是觉得傻,人家都写得清清楚楚了,“空记录”策略当然返回空记录啦,但真的很多小伙伴就是不知道这个空记录到底会怎样,希望这里能让你明白吧。

第二种策略:“全部记录”,下边我直接上测试图

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

第三种策略:“值为空的记录”

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

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

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

老秋 发表于 2023-3-30 10:54:24

说的很清楚了:)
页: [1]
查看完整版本: 彻底揭开查询条件中的“空值查询策略”面纱