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 方言。
在 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 方言。