0

是否有任何已知的算法或库可以帮助确定 SQL 谓词是否包含在另一个 SQL 谓词中?

这些谓词将出现在此语句之后

SELECT * FROM table1 WHERE ... 

例如,让我们看看这个谓词

name = Smith

我想检查该谓词是否包含在以下谓词中:

(company = Walmart OR hobby = baseball) AND (NOT (name != Smith))

我试图弄清楚第二个谓词的输出是否有可能包含第一个谓词的输出。在查询实际数据之前需要此信息。

约束:

  1. 不允许嵌套谓词。
  2. 只允许使用以下运算符:AND OR NOT BETWEEN IN IS。
4

1 回答 1

1

真值表可以帮助解决这个问题。

您可以将布尔表达式中的每个术语表示为真或假。或者等效地,导致每个术语为真或假的不同可能输入。

为这些的每一种组合制作一张表格。

公司 爱好 姓名 结果
沃尔玛 棒球 史密斯 真的
沃尔玛 高尔夫球 史密斯 真的
好市多 高尔夫球 史密斯 FALSE
好市多 高尔夫球 琼斯 错误的
沃尔玛 棒球 琼斯 错误的

还有其他组合,但我将它们排除在外。

然后为要测试的谓词制作一个真值表:name = Smith

公司 爱好 姓名 结果
沃尔玛 棒球 史密斯 真的
沃尔玛 高尔夫球 史密斯 真的
好市多 高尔夫球 史密斯 TRUE
好市多 高尔夫球 琼斯 错误的
沃尔玛 棒球 琼斯 错误的

第二个谓词不是第一个谓词的子集,因为在第一个谓词中,至少有一组输入的结果为 FALSE,即使结果name = Smith为真。我强调了与第一个谓词不同的结果。

我的答案中缺少的是一种解析布尔表达式并识别术语的方法,以便您可以制作真值表。这取决于您使用什么语言,等等。您可以在 Stack Overflow 上搜索类似问题的答案:https ://stackoverflow.com/search?q=parse+sql+boolean+expression

至于推荐可以为您执行此操作的库或软件产品,这超出了 Stack Overflow 答案的范围。主题问题指南明确指出,本网站并非旨在为软件库或工具提供建议。

于 2021-09-05T21:48:14.383 回答