我知道在其他SQL风格(T-SQL)中可以在没有表的情况下“选择”提供的数据。像:
SELECT *
FROM (VALUES (1,2), (3,4)) tbl
如何使用Teradata执行此操作?
答案 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
一对夫妇注意到:
您可以随时轻松创建单列表,并将其填充到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是仅包含几行的数据库后端表。因此,查询运行也很快