2016-01-13 101 views
0

我一些很老的遗留代码一起工作,和我见过的结构是这样查询表VS同一表的查询子查询

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

几个查询是否有任何优势来编写查询这条路?

这是在Oracle中。

+0

@GordonLinoff对不起,那是一个错字 – DixieFlatline

+0

我相信外面的查询带来的是'左JOIN'的结果而你不能从表格中直接得到,什么是'FIELDS'?你用它来代替'*'? –

+2

它真的只是一个直接的'SELECT * FROM TABLE1'作为子查询吗?我无法想象这样做的好理由。最好它的功能相同,最糟糕的是它使查询难以阅读。 – JNevill

回答

4

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

也许曾经有一次,那里有一个更复杂的查询。查询被表/视图取代,作者只是离开了原始结构。

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

我非常确定Oracle在智能查询优化时可以忽略子查询。并非所有的数据库都很聪明,但您可能想要清理代码。至少,子查询看起来很尴尬。

0

在SQL中是基本的好习惯,你不应该代码表全扫描(SELECT * FROM table,没有一个WHERE条款),除非必要,对性能问题。

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

SELECT 
    Fields 
FROM 
    TABLE1 LEFT JOIN TABLE2 ON...