我正在处理一些非常古老的遗留代码,并且我已经看到了一些像这样的结构的查询
SELECT
FieldA,
FieldB,
FieldC
FROM
(
SELECT * FROM TABLE1
)
LEFT JOIN TABLE2 ON...
以这种方式编写查询有什么好处吗?
这是在Oracle。
答案 0 :(得分:4)
使用像这样的子查询似乎没有任何优势。关于代码,原因可能是历史遗迹。
也许曾几何时,那里有一个更复杂的查询。查询被表/视图替换,作者只是离开了原始结构。
同样,曾几何时,可能需要计算一列(比如外部查询或select
)。然后该列包含在表/视图中,但结构仍然存在。
我很确定Oracle在优化查询时足够智能忽略子查询。并非所有数据库都是智能的,但您可能希望清理代码。至少,如子查询看起来很尴尬。
答案 1 :(得分:0)
作为SQL中的基本良好实践,除非必要,否则不应对表(SELECT * FROM table
,没有WHERE
子句)进行全扫描编码,以解决性能问题。
在这种情况下,没有必要:可以通过以下方式获得相同的结果:
SELECT
Fields
FROM
TABLE1 LEFT JOIN TABLE2 ON...