有没有办法检查两个 SQL 语句的数学相等性?
我有两个 SQL 语句:
对数据运行这两个语句并比较输出根本没有帮助。
需要评估语句背后的集合数学,就像方程求解器一样。
超出我的问题范围的是:
范围内:
两条 SQL 语句的数学等式是什么?对我来说,两个查询是等效的,如果在给定任何数据集的两个相同时,它们返回相同的结果集。
正如您所指出的,SQL 查询是关系代数的超集,可能非常复杂。我们可以混合子查询,使用存储过程和函数(确定性或非确定性),这将使您的查询看起来更像真正的代码。如果您正在谈论这些类型的查询,那么这将非常困难。事实上,它可能与“两种算法等价”问题没有什么不同。
在这种情况下,这可能是不可能的。
然而...
...如果您要比较的两个查询是严格的集合操作,这可能是可行的。如果是这样,您可以将查询转换为关系代数,然后按照等价规则进行计算。如果您有一个具有非平凡布尔条件的选择/限制,那么您最终可能需要证明这些条件也是等价的。然后你需要依赖布尔代数,你可能最终会做一个真值表。
如您所见,这将需要大量工作,据我所知,没有任何东西可以自动计算所有这些。不过,我发现了一些工具,如果您想处理任务,您可能会发现它们很有用: