SELECT Teradata 中的值
SELECT VALUES in Teradata
我知道在其他 SQL 风格 (T-SQL) 中可以 "select" 提供没有 table 的数据。喜欢:
SELECT *
FROM (VALUES (1,2), (3,4)) tbl
如何使用 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;
我无法访问 TD 系统进行测试,但您可以从上面的答案中删除其中一个嵌套的 SELECT:
select x.*
from (
select 1 as a, 2 as b
union all
select 3 as a, 4 as b
) x
如果您需要生成一些随机行,您可以随时从系统 table 中执行 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
几个注意事项:
- 确保您选择的系统 table 将始终存在并具有行
- 如果您需要的行数超过源 table 中可用的行数,请执行 UNION 以获得更多行
您总是可以轻松地创建一个单列 table 并通过 INSERT/SELECT 将其填充到您想要的任意行数:
创建虚拟表(c1 INT); -- 创建table
插入 DummyTable(1); -- 种子 table
插入 DummyTable SELECT * FROM DummyTable; -- 运行 这可以根据需要多次复制行
然后使用此 table 创建您想要的任何结果集,类似于上面使用 sys_calendar.calendar 的查询。
我没有要测试的 TD 系统,因此您可能会遇到语法错误...但这应该能为您提供一个基本概念。
我来晚了一点,但最近遇到了同样的错误。
我通过简单地使用
解决了这个问题
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 是一个只有几行的数据库后端 table。因此,查询运行速度也很快
我知道在其他 SQL 风格 (T-SQL) 中可以 "select" 提供没有 table 的数据。喜欢:
SELECT *
FROM (VALUES (1,2), (3,4)) tbl
如何使用 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;
我无法访问 TD 系统进行测试,但您可以从上面的答案中删除其中一个嵌套的 SELECT:
select x.*
from (
select 1 as a, 2 as b
union all
select 3 as a, 4 as b
) x
如果您需要生成一些随机行,您可以随时从系统 table 中执行 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
几个注意事项:
- 确保您选择的系统 table 将始终存在并具有行
- 如果您需要的行数超过源 table 中可用的行数,请执行 UNION 以获得更多行
您总是可以轻松地创建一个单列 table 并通过 INSERT/SELECT 将其填充到您想要的任意行数:
创建虚拟表(c1 INT); -- 创建table
插入 DummyTable(1); -- 种子 table
插入 DummyTable SELECT * FROM DummyTable; -- 运行 这可以根据需要多次复制行
然后使用此 table 创建您想要的任何结果集,类似于上面使用 sys_calendar.calendar 的查询。
我没有要测试的 TD 系统,因此您可能会遇到语法错误...但这应该能为您提供一个基本概念。
我来晚了一点,但最近遇到了同样的错误。
我通过简单地使用
解决了这个问题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 是一个只有几行的数据库后端 table。因此,查询运行速度也很快