FROM 子句中的 Table 表达式

GBase 8s 支持 SELECT 查询和子查询的 FROM 子句中的表表达式的 ANSI/ISO 标准语法,作为 GBase 8s 扩展集合派生表语法的替代。在版本 10.00 和更早版本的需要关键字 TABLE 和 MULTISET 。支持用于 SQL 的 ANSI/ISO 标准的这些扩展,但不再需要在 SELECT 语句的 FROM 子句中的集合派生表规范。

以下两个查询返回相同的结果集,但只要第二个查询符合 ANSI/ISO 标准:
SELECT * FROM TABLE(MULTISET(SELECT col1 FROM tab1 WHERE col1 = 100))
          AS vtab(c1),
          (SELECT col1 FROM tab1 WHERE col1 = 10) AS vtab1(vc1) ORDER BY c1;
          
          SELECT * FROM (SELECT col1 FROM tab1 WHERE col1 = 100) AS vtab(c1),
          (SELECT col1 FROM tab1 WHERE col1 = 10) AS vtab1(vc1) 
          ORDER BY c1;
        
同一个 SELECT 语句可以合并派生表的 GBase 8s 扩展和ANSI/ISO 语法的示例:
SELECT * FROM (SELECT col1 FROM tab1 WHERE col1 = 100) AS vtab(c1), 
          TABLE(MULTISET(SELECT col1 FROM tab1 WHERE col1 = 10)) AS vtab1(vc1)  
          ORDER BY c1;

子查询必须以两种格式的圆括号分隔,但紧跟在 TABLE 关键字后面并包含 MULTISET 集合子查询规范的外部圆括号(( ) )是 ANSI/ISO 语法的扩展。此 ANSI/ISO 语法仅在 SELECT 语句的 FROM 子句中有效。在任何其它上下文中,您不能从集合子查询规范中省略这些关键字和括号。