Teradata SQL-CREATE表作为选择表填充不同于手动运行查询的结果集



我有一个查询通常是

SELECT * 
FROM BILL_HISTORY a
JOIN 
(
Sel *
from SERVICE_INFO
Qualify Row_Number() OVER (PARTITION BY Service, Product_Code1, 
Product_Code2 ORDER BY Effective_Date1 DESC, Effective_Date2 DESC) = 1
) b
ON a.SERVICE = b.SERVICE

预期的结果集是过去6个月的发票以及SERVICE_INFO中的其他列。如果我在特定的服务ID上使用WHERE子句手动运行此查询,我会收到预期的结果。但是,如果我运行封装在CREATE VOLATILE TABLE中的相同查询。。。AS(SELECT*…(,然后当我查询相同的服务ID时,我只收到该服务的最新发票ID。

为什么会发生这种情况?如果我将表创建为perm或volatile,则会得到相同的结果。真让人头疼。。。

EDIT:显示在JOIN上进行的一般子查询,因为这似乎与问题的原因有关。

虽然我不确定发生这种情况的原因,但我能够解决这个问题,首先将针对联接表的子查询放入其自己的Volatile表中,然后完成对原始查询的联接。

代替

JOIN 
(
Sel *
from SERVICE_INFO
Qualify Row_Number() OVER (PARTITION BY Service, Product_Code1, 
Product_Code2 ORDER BY Effective_Date1 DESC, Effective_Date2 DESC) = 1
) b

第一个

Create Multiset Volatile Table SERVICE_INFO_VT AS (
Sel *
from SERVICE_INFO
Qualify Row_Number() OVER (PARTITION BY Service, Product_Code1, 
Product_Code2 ORDER BY Effective_Date1 DESC, Effective_Date2 DESC) = 1

然后完成原始查询

SELECT * 
FROM BILL_HISTORY a
JOIN SERVICE_INFO_VT b
ON a.SERVICE = b.SERVICE

无论是作为手动查询运行还是围绕CREATE TABLE/VOLATILE TABLE语句运行,都返回相同的结果

最新更新