我一些很老的遗留代码一起工作,和我见过的结构是这样查询表VS同一表的查询子查询
SELECT
FieldA,
FieldB,
FieldC
FROM
(
SELECT * FROM TABLE1
)
LEFT JOIN TABLE2 ON...
几个查询是否有任何优势来编写查询这条路?
这是在Oracle中。
我一些很老的遗留代码一起工作,和我见过的结构是这样查询表VS同一表的查询子查询
SELECT
FieldA,
FieldB,
FieldC
FROM
(
SELECT * FROM TABLE1
)
LEFT JOIN TABLE2 ON...
几个查询是否有任何优势来编写查询这条路?
这是在Oracle中。
使用像这样的子查询似乎没有优势。原因可能是关于代码的历史遗迹。
也许曾经有一次,那里有一个更复杂的查询。查询被表/视图取代,作者只是离开了原始结构。
同样,曾几何时,可能需要计算一列(比如对于外部查询或select
)。这个列然后被包含在表格/视图中,但结构仍然存在。
我非常确定Oracle在智能查询优化时可以忽略子查询。并非所有的数据库都很聪明,但您可能想要清理代码。至少,子查询看起来很尴尬。
在SQL中是基本的好习惯,你不应该代码表全扫描(SELECT * FROM table
,没有一个WHERE
条款),除非必要,对性能问题。
在这种情况下,这是没有必要的:同样的结果可以通过获得:
SELECT
Fields
FROM
TABLE1 LEFT JOIN TABLE2 ON...
@GordonLinoff对不起,那是一个错字 – DixieFlatline
我相信外面的查询带来的是'左JOIN'的结果而你不能从表格中直接得到,什么是'FIELDS'?你用它来代替'*'? –
它真的只是一个直接的'SELECT * FROM TABLE1'作为子查询吗?我无法想象这样做的好理由。最好它的功能相同,最糟糕的是它使查询难以阅读。 – JNevill