给定一个SELECT
带有任意嵌套子选择的 SQL 表达式,是否总是可以重写所述 SQL 表达式,使其不包含子选择并返回相同的结果集?
如果是这样,是否有这样做的算法?
如果没有,是否存在SELECT
无法重写的那些表达式的特征?
我正在制作一个将生成 SQLSELECT
语句的应用程序。在这一点上,我仍在设计它的工作方式。不过,这是一般的想法:
用户将选择显示哪些列、结果如何排序以及如何限制。
这些列不仅是 SQL 列,而且是命名对象,因此该对象可以包含一个 SQL 表达式,其中包含来自多个表的列变量。这些对象将包含有关如何相互连接的信息。
我想让这些表达式的配置尽可能灵活;如果可以编写返回某些结果集的 SELECT 语句S
,那么我希望应用程序能够生成SELECT
返回的语句S
。SQL 中可能的一件事是子选择。我读过用 JOINS 重写所说的子选择在性能方面会更好。因此,我正在考虑在配置中禁止子选择。但是我不想这样做,除非每个子选择都可以重写为连接。