我试图弄清楚如何有效地运行一组查询,这些查询将提供一个包含所有值的新表,这些值将返回任意查询的结果。
假设我的表具有如下架构:
- ID
- 姓名
- 年龄
- 城市
列出所有将返回任意查询结果的值(例如,SELECT * FROM main WHERE NOT city=X AND age BETWEEN Y AND Z
)的有效方法是什么?
我对此的天真方法是使用脚本并通过 {city, age, age} 的所有可能组合进行递归,并查看哪些 SELECT 返回超过 0 个结果,但这似乎非常低效。我也尝试过在 {city, age, age} 上构建大型连接,并且基本上使用该表作为查询的参数列表,但这很快就成为不可能对许多列进行查询。
对于简单的连接相等查询(例如,SELECT * FROM main WHERE name=X AND age=Y
),这要简单得多,因为我可以执行以下操作:
SELECT name, age, count(*) AS count FROM main GROUP BY name, age HAVING count > 0
但是我很难为比这更复杂的事情想出一个通用的方法。
任何指向正确方向的指针都会非常有帮助,谢谢。
编辑:
看来我在解释这一点上做得很糟糕,对不起。
想象一下,一个用户给了我一个数据库和一个模板查询并说:“告诉我我可以在这个查询中使用的所有值,这些值将从这个数据库中产生结果。” 例如,用户可能想知道将返回至少一行的所有年龄范围查询(例如,模板查询是SELECT * FROM main WHERE age BETWEEN X AND Y
)。
在该特定示例中,可以运行 SELECT 以查找数据库中的最小/最大年龄,并告诉用户在这些年龄之间进行查询。
现在假设查询模板更复杂,例如SELECT * FROM main WHERE NOT city=W AND age BETWEEN X AND Y AND name LIKE Z
. 如何确定可用于此查询以返回结果的 W/X/Y/Z 值的范围?它是否需要使用每个 {city, age, age, name} 组合创建一个连接表并在每一行上运行 SELECT?我怎样才能有效地做到这一点,以便操作在大型数据库上是有时间限制的?
希望这能澄清它。