2

有一个像`

`where a.c1 in ( list ) `

然后将列表推到 volatile 表中是最好的出路。然而,这是通过 cognos 完成的,IBM 不够聪明,无法知道 Teradata 的 volatile 表是什么。我希望这样我可以使用排除逻辑 Exists 来检查易失性表的内容。所以没有 volatile table ,我有一个值列表 where a.c1 in ( list ) ,它有 5K 个值。在报告中保留该列表被证明是昂贵的。我想知道是否可以在将此类列表放入报告之前将其存储在某个地方。CTE 和使用存在于 CTE 上怎么样,是否会获得类似的收益。

4

1 回答 1

3

您可以将列表作为字符串传递,然后将其拆分为表格,例如整数列表:

where a.c1 in
 (
   SELECT CAST(token AS INT)
   FROM TABLE (STRTOK_SPLIT_TO_TABLE(1, '1,2,3,4,5,6,7,8,9,5000', ',')
        RETURNS (outkey INTEGER,
                 tokennum INTEGER,
                 token VARCHAR(10) CHARACTER SET UNICODE)
              ) AS dt 
 )

当然优化器不知道返回的行数,所以最好检查一下解释...

于 2015-11-04T12:57:01.590 回答