如果我们采取以下措施:

WITH tbl AS (
    SELECT RAND() AS a
) SELECT * FROM tbl AS tbl1, tbl AS tbl2

enter image description here

为什么返回两个值而不是一个值?我认为CTE基本上在一开始就判断一次,然后在需要的地方使用?还是我对CTE持续性的理解不正确?或者不同数据库的实现是否不同?

与MySQL相比,MySQL返回一个持久值:

enter image description here

推荐答案

根据docs

BigQuery只具体化递归CTE的结果,但不具体化WITH子句中非递归CTE的结果.如果在查询中的多个位置引用了非递归CTE,则对每个引用执行一次CTE.

因此,您所看到的至少是BigQuery所期望的.

Sql相关问答推荐

如何从多行数据中获取一行合并数据?

在多个柱上连接时,如何确定连接条件?

数据库索引:如何使用名称和类别对项目进行最佳索引?

有没有办法在Postgres中存储带有时区的时间戳,而不将其转换为UTC

如何将我的联接数据放入每个用户每月多行的列中?

如何使用SQL Server中的Nodes()方法执行与OPENXML相同的操作

在PostgreSQL中汇总连接表中的 case 值

从类似JSON的字符串列创建新列

使用特定的Order By子句随机化SQL输出

在 PostgreSQL 中使用 ltree 列进行累积

如何创建snowflake表(动态查找数据类型)并从阶段加载(AWS S3)?

如何解释 SQL Server 中的 Foxpro 语法?

Postgres如何在一个日历周中前进和回填值

使用 PL/PGSQL 函数 Select 返回多条记录

postgres按组消除分区中的NULLS

在 postgresql 中保存带有时间戳的几何类型数据

连续几天购买的客户

在 MySql 数据库中的两个日期之间搜索

如何找到特定时间间隔内的最大和最小日期?

在 SQL 中将行显示为列