我知道,在其他SQL风格(T-SQL)中,可以不通过表“选择”提供的数据。喜欢:
SELECT *
FROM (VALUES (1,2), (3,4)) tbl
Run Code Online (Sandbox Code Playgroud)
如何使用Teradata做到这一点?
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;
Run Code Online (Sandbox Code Playgroud)
我无法访问 TD 系统进行测试,但您也许可以从上面的答案中删除其中一个嵌套 SELECT:
select x.*
from (
select 1 as a, 2 as b
union all
select 3 as a, 4 as b
) x
Run Code Online (Sandbox Code Playgroud)
如果您需要生成一些随机行,您始终可以从系统表中执行 SELECT,例如 sys_calendar.calendar:
SELECT 1, 2
FROM sys_calendar.calendar
SAMPLE 10;
Run Code Online (Sandbox Code Playgroud)
更新的示例:
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
Run Code Online (Sandbox Code Playgroud)
一些注意事项:
您始终可以轻松创建单列表并通过 INSERT/SELECT 将其填充到您想要的任意行数:
创建虚拟表(c1 INT);-- 创建表
INSERT INTO DummyTable(1); -- 种子表
INSERT INTO DummyTable SELECT * FROM DummyTable; -- 运行此命令以重复行,次数不限
然后使用此表创建您想要的任何结果集,类似于上面使用 sys_calendar.calendar 的查询。
我没有要测试的 TD 系统,因此您可能会遇到语法错误...但这应该会给您一个基本的想法。