知道一个SQL请求的结果是否必须是另一个SQL请求结果的一部分

2024-06-17 10:01:37 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有下表:

Id (int, Primary Key) | Value (varchar)
----------------------+----------------
1                     | toto
2                     | foo
3                     | bar

我想知道如果给出两个请求,第一个请求的结果必须包含在第二个的结果中,而不执行它们

一些例子:

# Obvious example
query_1 = "SELECT * FROM example;"
query_2 = "SELECT * FROM example WHERE id = 1;"
is_sub_part_of(query_2, query_1)  # True

# An example we can't know before executing the two requests
query_1 = "SELECT * FROM example WHERE id < 2;"
query_2 = "SELECT * FROM example WHERE value = 'toto' or value = 'foo';"
is_sub_part_of(query_2, query_1)  # False

# An example we can know before executing the two requests
query_1 = "SELECT * FROM example WHERE id < 2 OR value = 'bar';"
query_2 = "SELECT * FROM example WHERE id < 2 AND value = 'bar';"
is_sub_part_of(query_2, query_1)  # True

# An example about columns
query_1 = "SELECT * FROM example;"
query_2 = "SELECT id FROM example;"
is_sub_part_of(query_2, query_1)  # True

您知道Python中是否有一个模块能够做到这一点,或者是否有可能做到这一点


Tags: offromanidtruefooisvalue
1条回答
网友
1楼 · 发布于 2024-06-17 10:01:37

有趣的问题。我不知道有哪个图书馆会为你做这件事。我的想法:

  • 解析SQL,例如参见this
  • 定义哪些筛选操作可以添加到只能产生相同或更窄结果集的查询。”我认为,x“总是可以加上,而不会失去作为子集的属性。”或者“x”不能。您还可以对查询执行其他操作吗?例如,“选择*”,vs“选择x”,vs“选择x,y”

除此之外,我只能说这是一个有趣的想法。您可能会在DBA上获得更多的输入。这是您正在研究的想法,还是与您正在解决的实际问题有关,比如优化数据库查询?也许您的问题可以用相关信息更新,因为这不是优化查询的常用方法(我想,除非您正在使用DB引擎本身)

相关问题 更多 >