Oracle SQL Select - 根据语法图的有效选择列表
Posted
技术标签:
【中文标题】Oracle SQL Select - 根据语法图的有效选择列表【英文标题】:Oracle SQL Select - Valid select list according to syntax diagram 【发布时间】:2017-02-15 08:42:21 【问题描述】:我在 Oracle 中成功运行了如下的 SELECT 语句:
SELECT a.*, b.* FROM table_a a, table_b b;
这里我给table table_a 赋予别名'a' 和table_b 别名'b'。 然后我使用选择列表中的两个表别名('a.*,b.*') 每个表别名都有一个星号,以从两者中选择所有列 表格。
当然,我可以使用 '*' 作为选择列表来获取所有列 来自两个表,但它是关于选择列表的有效内容 (比如这里的 'a.*, b.*')。
我可以执行上述语句,但是当我查看 Oracle 文档中选择列表的语法图时,似乎在选择列表中使用多个表别名是无效的。
问题是,是否可以使用选择列表的语法图导出类似 ('a.*, b.*') 的内容。在语法图中,似乎我可以在选择中只有一个表别名,因为我不能在图中“返回”来添加逗号和另一个表别名。
语法图:http://docs.oracle.com/database/121/SQLRF/img/select_list.gif
SELECT 的一般说明:http://docs.oracle.com/database/121/SQLRF/statements_10002.htm#SQLRF01702
【问题讨论】:
顺便说一句,尽量避免old-style joins @JohnHC 通常我使用新的连接方式,谢谢。在这里我只是对有效的语法感到好奇。 【参考方案1】:是的,你可以。如果你有更多的值,那么你只需要遍历回逗号,如下所示。
【讨论】:
似乎是图中的一个小疏忽/错误,可以通过将comma
路径交换到外部和内部的[t_alias].*
来澄清这种混淆。
我认为他们试图在语法图中的其他表达式中使用单个逗号。例如,相同的逗号用于其他表达式,例如 schema.table.*
和 expr as c_alias
。
然而,语法 SELECT *, 1 FROM DUAL
无效但 SELECT d.*, 1 FROM DUAL d
有效 - 因此在语法图中交换这两个路径的位置将适用于第二个示例,但也意味着第一个应该是有效的语法(它不是)。
@MT0 好点 - 如果从别名路径返回逗号路径,则 SELECT *, 1 FROM DUAL 将是有效的。以上是关于Oracle SQL Select - 根据语法图的有效选择列表的主要内容,如果未能解决你的问题,请参考以下文章
oracle 中select /* */ from table语法