Oracle 的 DUAL 的 Teradata 等价物是什么

What is Teradata's equivalent for Oracle's DUAL

在 Oracle 中,我们可以使用 SELECT 语句编写此代码以生成单行。

SELECT 1 AS x FROM dual

Teradata 的等效项是什么?

一般不需要table

在大多数情况下,Teradata 数据库中并不需要 table。以下是有效的 SQL(就像 H2、PostgreSQL、Redshift、SQL Server、SQLite、Sybase ASE、Sybase SQL Anywhere、Vertica )

SELECT 1
SELECT 1 WHERE 1 = 1

例外情况

但是,当需要设置操作时,会有一个例外。例如。这在 Teradata 中无效:

SELECT 1 UNION ALL SELECT 2

产生此错误:

A SELECT for a UNION,INTERSECT or MINUS must reference a table.

但是由于 FROM 子句通常是可选的,所以很容易模拟 DUAL table 如下:

SELECT 1 FROM (SELECT 1 AS "DUMMY") AS "DUAL"
UNION ALL 
SELECT 2 FROM (SELECT 1 AS "DUMMY") AS "DUAL"

兼容性

如果需要与 Oracle 等实现兼容性,很容易创建一个行为类似于 Oracle 的双视图:

CREATE VIEW "DUAL" AS (SELECT 1 AS "DUMMY");

注意DUAL是Teradata中的关键字,因此需要引用视图。

其他方言

如果有人感兴趣,jOOQ user manual lists various ways of emulating DUAL(如果需要)30 多种 SQL 方言。