查询表与查询同一表的子查询

时间:2016-01-13 16:03:07

标签: sql oracle

我正在处理一些非常古老的遗留代码,并且我已经看到了一些像这样的结构的查询

SELECT
    FieldA,
    FieldB,
    FieldC
FROM
    (
     SELECT * FROM TABLE1
    )
    LEFT JOIN TABLE2 ON...

以这种方式编写查询有什么好处吗?

这是在Oracle。

2 个答案:

答案 0 :(得分:4)

使用像这样的子查询似乎没有任何优势。关于代码,原因可能是历史遗迹。

也许曾几何时,那里有一个更复杂的查询。查询被表/视图替换,作者只是离开了原始结构。

同样,曾几何时,可能需要计算一列(比如外部查询或select)。然后该列包含在表/视图中,但结构仍然存在。

我很确定Oracle在优化查询时足够智能忽略子查询。并非所有数据库都是智能的,但您可能希望清理代码。至少,如子查询看起来很尴尬。

答案 1 :(得分:0)

作为SQL中的基本良好实践,除非必要,否则不应对表(SELECT * FROM table,没有WHERE子句)进行全扫描编码,以解决性能问题。

在这种情况下,没有必要:可以通过以下方式获得相同的结果:

SELECT
    Fields
FROM
    TABLE1 LEFT JOIN TABLE2 ON...