2017-02-15 97 views
2

我跑了select语句像甲骨文以下成功:的Oracle SQL选择 - 根据语法图有效选择列表

SELECT a.*, b.* FROM table_a a, table_b b; 

这里,我给表表-A别名“a”和表-B别名“B ”。 然后我使用选择列表('a。*,b。*') 中的两个表别名,并为每个表别名添加一个星号,以便从两个 表中选择所有列。

当然,我可以只使用“*”作为选择列表两个表中获取所有列 ,但它是关于什么是有效的选择列表 (喜欢这里“一个。*,B *”)。

我可以执行类似上面的语句,但是当我查看Oracle文档中选择列表的语法图时,似乎在选择列表中使用多个表别名是无效的。

问题是,是否有可能用选择列表的语法图来推导出类似('a。*,b。*')的内容。在语法图中,似乎我可以在select中只有一个表别名,因为我不能在图中“返回”来添加逗号和其他表别名。

语法图:http://docs.oracle.com/database/121/SQLRF/img/select_list.gif

的SELECT概述:http://docs.oracle.com/database/121/SQLRF/statements_10002.htm#SQLRF01702

+0

顺便说一句,尽量避免[旧式联接(http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick -using-old-style-joins.aspx) – JohnHC

+0

@JohnHC通常我会使用新的样式连接,谢谢。在这里,我只是对有效的语法感到好奇。 – FFSmith

回答

1

当然可以。如果你有更多的价值,那么你只需要回到如下所示的逗号。

enter image description here

+1

看起来像图中的一个小的监督/错误,通过将'逗号'路径交换到外部以及'[t_alias]。*'内部来澄清这种混淆。 – MT0

+0

我认为他们试图在语法图中为其他表达式使用单逗号。例如,相同的逗号用于其他表达式,如'schema.table。*'和'expr as c_alias'。 – JSapkota

+0

但是,语法'SELECT *,1 FROM DUAL'是无效的,但是'SELECT d。*,1 FROM DUAL d'是有效的 - 所以在语法图中交换这两条路径的位置对于第二个例子是有效的,但是会也意味着第一个应该是有效的语法(它不是)。 – MT0