我有一个查询,通常可以查询
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,结果相同。真正的抓头人...
编辑:显示对JOIN进行的常规子查询,因为这似乎与问题的原因有关。
答案 0 :(得分:0)
尽管我不确定发生这种情况的原因,但我能够解决问题,方法是先将针对联接表的子查询放在其自己的易失性表中,然后再完成对原始查询的联接。
代替
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语句返回相同的结果