麻烦写递归查询

问题描述 投票:0回答:1

我很抱歉,对我的问题的解释可能会太混乱。我有包括细节,以使事情尽可能通俗易懂我遇到的障碍。

我正在使用两个如下表在Teradata中工作

Table Name             Fields
Sales                (ID, Sales)
Discounts       (ID, PromoNum, Discount)

PromoNum字段由与优惠券相对应的9位唯一促销编号组成。这有助于跟踪交易何时包含已使用的特定优惠券。每交易可以应用超过1张优惠券。

我正在尝试创建一个递归查询,以获取给定优惠券集的销售和折扣以迭代的方式。我这样做的原因是因为单笔交易可以应用多于一张的优惠券(用于1个或多个项目)。如果我避免递归查询路由并在ID上进行内部联接,则可能重复不必要地记录在同一笔交易中使用两个或多个促销编号的情况,从而导致潜在的销售或折扣高于实际水平。最重要的是,我只有读取权限到数据库。

我创建了一个名为Promos的临时表,该表具有3个我想交替运行的特定促销信息并具有字段PromoNumPromoIndexPromoIndex本质上是每个行的行号我在下面尝试通过一种互动方式来推广。

我到目前为止编写的递归查询如下。由于逻辑原因,它无法按预期工作我已经发表评论了。我需要重写此部分,以确保它只运行特定迭代中与索引对应的促销编号。例如,当它在迭代2时,从技术上讲,它将只应在PromoIndex 1和PromoIndex 2上运行对于PromoIndex 2(如果有意义)。我试图重写它,同时保持原样允许在递归查询中使用,但我无法弄清楚。

WITH RECURSIVE PromoData AS
(
SELECT 
  1 AS PromoIndex
  , 1 AS PromoNum --dummy column
  , 0 AS Sales --dummy column
  , 0 AS Discounts --dummy column
FROM 
Dummy Table

UNION ALL

SELECT 
  PromoData.PromoIndex + 1
  , PromoData.PromoNum
  , Sales.Sales
  , Sales.Discounts
FROM Sales
INNER JOIN Discounts on Sales.ID = Discounts.ID
INNER JOIN Promos on Promos.PromoNum = Discounts.PromoNum and Promos.PromoIndex = PromoData.PromoIndex --Problematic portion here
WHERE PromoData.PromoIndex <= 3
)
SELECT *
FROM PromoData
sql recursion teradata recursive-query
1个回答
0
投票

根据您的描述,您想要:

select s.*
from sales s
where exists (select 1
              from discounts d join
                   promos p
                   on d.promonum = p.promonum
              where d.id = s.id 
             );

我看不到递归查询与您描述的问题有什么关系。

© www.soinside.com 2019 - 2024. All rights reserved.