在 FROM 子句中引用别名为表的其他 SQL SELECT 语句

Posted

技术标签:

【中文标题】在 FROM 子句中引用别名为表的其他 SQL SELECT 语句【英文标题】:Refer to other SQL SELECT statements aliased as tables in FROM clause 【发布时间】:2009-04-14 12:49:58 【问题描述】:

我有一个非常大的查询,格式如下:

select ...
  from ( select field1,
                field2
           from some_table ) table1,
       ( select field1,
                field3
           from other_table ) table2

 where .....

我是否可以在 from 子句中的其他表定义之一中引用 from 子句中“定义”的表之一,比如说 table1?

例如:

select ....
  from ( select field1,
                field2
           from some_table ) table1,
       ( select table1.field1,
                field3
           from other_table,
                table1 ) table2

 where .....

免责声明:我想做的并不像上面的例子那么简单。这个例子只是为了说明这个想法。

【问题讨论】:

这并不是您问题的真正答案,但您的问题涉及的一些问题可能可以通过使用视图来解决。 【参考方案1】:
WITH
table1 AS
        (
        SELECT  field1, field2
        FROM    some_table
        ),
table2 AS
        (
        SELECT  field1, field2
        FROM    other_table, table1
        )
SELECT  *
FROM    table2

【讨论】:

【参考方案2】:

如果您使用的是 SQL 2005,则可以使用公用表表达式来执行您正在尝试的操作; Quassnoi 给我们举了一个例子,在 Oracle 中我不知道如何实现它

【讨论】:

在 Oracle 中,别名位于查询之前。

以上是关于在 FROM 子句中引用别名为表的其他 SQL SELECT 语句的主要内容,如果未能解决你的问题,请参考以下文章

[Oracle]Oracle良性SQL建议

Oracle SQL性能优化技巧大总结

Oracle SQL性能优化技巧大总结

Oracle SQL性能优化

数据库性能优化之SQL语句优化(下)

在运行时确定SQL From子句?