有一个类似的值清单
`where a.c1 in ( list ) `
然后将列表推入volatile表是最好的方法。但是,这是通过cognos完成的,并且IBM不够聪明,无法知道Teradata的volatile表是什么。我希望是这样,所以我可以使用排除逻辑Exists来浏览易失性表的内容。所以没有volatile table,我有一个值列表 where a.c1 in ( list ) ,它具有5K值。将该列表保留在报告中被证明是昂贵的。我想知道是否可以将这种列表存储在报表中之前的某个位置。CTE如何使用和存在于CTE上,将获得类似的收益。
where a.c1 in ( list )
您可以将列表作为字符串传递,然后将其拆分为表格,例如整数列表:
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 )
当然优化器不知道返回的行数,所以最好检查一下Explain …