我试图找到一种方法来确定SQL SELECT查询 A 是否容易返回另一个查询 B 返回的结果的子集。此外,这需要仅从查询中完成,而无需访问相应的结果集。
例如,查询SELECT * from employee WHERE salary >= 1000
将返回查询SELECT * from employee
的结果的子集。我需要找到一种自动方式来执行任何两个查询 A 和 B 的验证,而无需访问存储数据的数据库。
如果在没有RDBMS的帮助下实现这一目标是不可行的,我们可以假设我可以访问本地但空的RDBMS,但数据存储在其他地方。此外,必须使用算法或库在代码中完成此检查。我使用的语言是Java,但其他语言也可以。
非常感谢提前。
答案 0 :(得分:0)
我不知道你想要深入解析查询的深度,但基本上你可以说有两种一般的方法来制作一个查询的子集(假设源表和投影(选择)保持不变相同):
所以你可以说,如果你有两个代表查询的对象,并说它们看起来很接近这个:
{
'select': { ... },
'from': {},
'where': {},
'orderby': {}
}
他们select
,from
和orderby
是相同的,但是在where
子句中有一个额外的条件,你有一个子集。
答案 1 :(得分:0)
您可以通过检查其源表来确定查询是否是另一个查询的子集的一种方法。如果您无法访问数据本身,这可能会非常棘手。此问题引用了使用Snowflake连接基于查询生成数据库图表而无需访问数据本身:
Generate table relationship diagram from existing schema (SQL Server)
如果您的查询不超过800个字符,该工具可以免费使用:https://snowflakejoins.com/index.html
我使用AdventureWorks数据库和这两个查询对其进行了测试:
SELECT * FROM HumanResources.Employee
SELECT * FROM HumanResources.Employee WHERE EmployeeID< 200 强>
当我将它们插入Snowflake Joins文本编辑器时,这就是生成的内容:
SnowflakeJoins DB Diagram example
希望有所帮助。