Teradata中如何定义可在SELECT查询中复用的变量?
在Teradata中定义可复用的IN值集合变量
方法1:使用Teradata宏(Macro)
宏是Teradata里封装可复用SQL逻辑的对象,完美适配你需要多次引用同一值集合的场景。
创建宏
REPLACE MACRO get_var_1() AS ( SELECT 'x1' AS val UNION ALL SELECT 'x2' AS val UNION ALL SELECT 'x3' AS val );
查询中引用宏
SELECT * FROM your_table WHERE key IN (SELECT val FROM TABLE(get_var_1()));
后续要修改值集合时,只需重新替换宏定义,所有引用该宏的查询都会自动同步生效。
方法2:会话级临时表
如果仅需在当前会话内复用值集合,可创建临时表存储:
创建临时表
CREATE VOLATILE TABLE var_1_values (val VARCHAR(10)) ON COMMIT PRESERVE ROWS; INSERT INTO var_1_values VALUES ('x1'), ('x2'), ('x3');
查询中引用
SELECT * FROM your_table WHERE key IN (SELECT val FROM var_1_values);
临时表仅在当前会话存在,会话结束后自动销毁,适合临时复用场景。
方法3:WITH子句(单次查询内复用)
如果只是在单个复杂查询里多次引用值集合,WITH子句更简洁:
WITH var_1 AS ( SELECT 'x1' AS val UNION ALL SELECT 'x2' AS val UNION ALL SELECT 'x3' AS val ) SELECT * FROM your_table WHERE key IN (SELECT val FROM var_1) -- 同一查询内可继续引用var_1 UNION ALL SELECT * FROM another_table WHERE another_key IN (SELECT val FROM var_1);
注意:WITH子句的作用范围仅限当前查询,无法跨多个独立查询复用。
内容的提问来源于stack exchange,提问作者Konrad Lubelski
相关产品推荐
相关产品推荐

