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

时间:2015-07-29 10:58:57

标签: python mysql sql

假设我有下表:

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中是否有一个能够做到这一点的模块,或者它是否可以做到这一点?

1 个答案:

答案 0 :(得分:0)

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

  • 解析SQL,例如,请参阅this
  • 定义哪些过滤操作可以添加到只能导致相同或更窄结果集的查询中。我认为,“AND x”总是可以添加,而不会失去作为子集的属性。 “或x”不能。你还可以对查询做些什么吗?例如“SELECT *”,vs“SELECT x”,vs“SELECT x,y”。

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