Teradata中对应Oracle DUAL表的等价实现及SQL写法是什么?
Teradata中对应Oracle DUAL表的等价方案及单行查询写法
刚从Oracle切换到Teradata的小伙伴肯定会有这个疑问——毕竟DUAL表在Oracle里太常用了,用来生成单行测试数据或者调用函数都离不开它。其实Teradata里也有对应的解决方案,而且有两种常用方式:
方式一:直接省略FROM子句(最简便)
Teradata支持无FROM子句的单行查询,这是最直接也最省事的写法,完全不需要类似DUAL的表对象。比如你要生成SELECT 1 AS x FROM dual的等价结果,直接写:
SELECT 1 AS x;
像调用系统函数、获取当前时间这类场景,也可以直接这么写:
SELECT CURRENT_DATE, CURRENT_TIMESTAMP;
方式二:使用SYSDUMMY1系统表(贴近Oracle习惯)
如果你更习惯Oracle的写法,想要一个类似DUAL的表对象,Teradata提供了SYSDUMMY1系统表。这个表是Teradata专门设计的,只有一行一列(列名为DUMMY,固定值为'Y'),功能和Oracle的DUAL完全一致。对应的SQL写法就是:
SELECT 1 AS x FROM SYSDUMMY1;
同样,调用函数的场景也可以用它:
SELECT CURRENT_DATE FROM SYSDUMMY1;
小提示
两种写法效果完全一样,日常使用中直接省略FROM子句更简洁;如果是从Oracle迁移代码,替换成FROM SYSDUMMY1可以最小化修改成本。
内容的提问来源于stack exchange,提问作者Lukas Eder
相关产品推荐
相关产品推荐

