Teradata中的SELECT VALUES

时间:2017-11-28 13:20:39

标签: sql teradata

我知道在其他SQL风格(T-SQL)中可以在没有表的情况下“选择”提供的数据。像:

SELECT *
FROM (VALUES (1,2), (3,4)) tbl

如何使用Teradata执行此操作?

3 个答案:

答案 0 :(得分:4)

Teradata的语法很奇怪:

select t.*
from (select * from (select 1 as a, 2 as b) x
      union all
      select * from (select 3 as a, 4 as b) x
     ) t;

答案 1 :(得分:1)

我无法访问要测试的TD系统,但您可以从上面的答案中删除其中一个嵌套的SELECT:

select x.*
from (
  select 1 as a, 2 as b
  union all
  select 3 as a, 4 as b
) x

如果需要生成一些随机行,可以随时从系统表中执行SELECT,如sys_calendar.calendar:

SELECT 1, 2
FROM sys_calendar.calendar
SAMPLE 10;

更新示例:

SELECT TOP 1000 -- Limit to 1000 rows (you can use SAMPLE too)
    ROW_NUMBER() OVER() MyNum, -- Sequential numbering
    MyNum MOD 7, -- Modulo operator
    RANDOM(1,1000), -- Random number between 1,1000
    HASHROW(MyNum) -- Rowhash value of given column(s)
FROM sys_calendar.calendar; -- Use as table to source rows

一对夫妇注意到:

  • 确保选择一个始终存在并且有行的系统表
  • 如果您需要的行数多于源表中可用的行数,请执行UNION以获取更多行
  • 您可以随时轻松创建单列表,并将其填充到INSERT / SELECT所需的任意行数:

    CREATE DummyTable(c1 INT); - 创建表
    插入DummyTable(1); - 种子表
    INSERT INTO DummyTable SELECT * FROM DummyTable; - 运行此操作以复制行多次

然后使用此表创建所需的结果集,类似于上面使用sys_calendar.calendar的查询。

我没有TD系统进行测试,因此您可能会遇到语法错误......但这应该会给您一个基本的想法。

答案 2 :(得分:0)

我对此线程有些迟,但是最近遇到了同样的错误。

我通过简单地使用

解决了这个问题
select distinct 1 as a, 2 as b from DBC.tables
union all 
select distinct 3 as a, 4 as b from DBC.tables

在这里,DBC.tables是仅包含几行的数据库后端表。因此,查询运行也很快