【问题标题】:Oracle syntax for subselect in FROM clause?FROM子句中子选择的Oracle语法?
【发布时间】:2018-04-03 23:47:11
【问题描述】:

根据Using Subqueries,Oracle SQL 接受 select 语句的 from 子句中的子查询,例如

SELECT * FROM ( SELECT a FROM b );

但是,查看SELECT documentation,我认为不可能在 from 子句中进行选择/子查询(例如,从规则 table_referencejoin_clause)。

我在这里遗漏了什么吗,这部分 SQL 语法是否记录在其他地方?或者这是文档的另一个不完整部分?

【问题讨论】:

标签: sql oracle subquery sql-subselect inline-view


【解决方案1】:

在您链接的文档中,您可以看到table_reference 可以是query_table_expression,也可以是( subquery )

【讨论】:

  • 完全忽略了这一点,谢谢(以及其他评论者)!
【解决方案2】:

Oracle 语法图非常详尽:

您要查找的名称是:

  • 表引用 --> 查询表表达式
  • 查询表表达式 --> 子查询

由于可选的lateral,这有点令人困惑。

我想知道是否允许在任何允许表达的地方使用横向。

【讨论】:

    【解决方案3】:

    每个派生表都必须有自己的别名。

    你可以使用类似的东西

      SELECT * FROM b
      WHERE a >
         (SELECT a FROM b
          WHERE a='India')
    

    或者干脆用

    SELECT * FROM b
      WHERE (SELECT a FROM b)
    

    但是这样一来,就会多出1行。如果不使用Where子句

    【讨论】:

    • 这不适用于 Oracle。在 Oracle 中,您可以有一个派生表而不给它一个别名(这有时很方便。)您的第二个查询在 Oracle 中是无效的,因为 Oracle 的 SQL 不知道布尔类型。要在其他 DBMS 中有效,子查询必须返回不超过一条记录,并且 a 列必须是布尔值。
    猜你喜欢
    • 2010-12-25
    • 1970-01-01
    • 2022-11-08
    • 2019-04-20
    • 2012-01-12
    • 1970-01-01
    • 1970-01-01
    • 2013-11-02
    • 1970-01-01
    相关资源
    最近更新 更多