sql - Teradata SQL - CREATE table as select - 表填充的结果集与手动运行查询不同
问题描述
我有一个通常会出现的查询
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 上进行的一般子查询,因为这似乎与问题的原因有关。
解决方案
虽然我不确定发生这种情况的原因,但我能够通过首先将针对连接表的子查询放入其自己的易失性表中,然后完成原始查询的连接来解决问题。
代替
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 语句运行,它都会返回相同的结果
推荐阅读
- c# - 如何在代码 C# .net 5 中获取当前使用的 openapi 版本
- r - 按组在多列上汇总唯一值
- linux - 使用 at 命令(预定脚本)运行 bash 脚本不起作用
- vue.js - 将 Formstack 嵌入 Vuejs
- groovy - 如何从 groovy 元素访问 Camel 的属性 CamelLoopIndex?
- java - 我想通过 Java Rest api 在 Google Duo 上创建一个用户。遵循文档但出现错误
- colors - highlightcolor 与 monokai for atom 不同,与 sublime 文本中的不同
- c# - 缓动功能而不从 Freezable 继承?
- c# - 使用泛型和单链表(错误 CS0311)
- python - 为什么即使我在 Pipfile 中指定了版本,依赖项也会默认为最新版本?