3

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

SELECT 1 AS x FROM dual

Teradata 的等价物是什么?

4

1 回答 1

9

一般不需要这样的表

在大多数情况下,Teradata 数据库中实际上不需要任何表。以下是有效的 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

产生此错误:

UNION、INTERSECT 或 MINUS 的 SELECT 必须引用表。

但是由于该FROM子句通常是可选的,因此很容易模拟DUAL如下表:

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 用户手册列出了DUAL在 30 多种 SQL 方言中模拟(如果需要)的各种方法。

于 2018-04-18T14:04:21.933 回答