Teradata中与Oracle的DUAL相当的是什么?

6
在 Oracle 中,我们可以使用 SELECT 语句编写以下内容以生成单行数据。
SELECT 1 AS x FROM dual

什么是Teradata的等效产品?
1个回答

13

通常情况下,Teradata数据库不需要这样的表

在大多数情况下,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 的 dual 的视图:

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

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

其他 SQL 方言

如果有人感兴趣,jOOQ 用户手册列出了 30 多种 SQL 方言中模拟 DUAL(如果需要)的各种方法。


您也可以创建一个Oracle单记录DUAL表来解决这个问题。 - access_granted
@access_granted:肯定是一个选项。我已经更新了我的答案。 - Lukas Eder
1
@access_granted:不需要双replace view "dual" as select 'X' as DUMMY更简单。 - dnoeth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接