FROM 子句中的表表达式

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 子句中是有效的。在任何其他上下文中,您不可省略来自集合子查询规范的这些关键字和圆括号。

重要:

FROM 子句中的集合子查询不可包括相关的表引用,也不可包括 LATERAL 关键字。