TERADATA比较表中的匹配项



我有一个关于表间比较的问题。

我想用不同的过滤条件比较同一表中的数据:

第一个版本:

select * 
from PPT_TIER4_FTSRB.AUTO_SOURCE_ACCOUNT 
WHERE BUSINESS_DATE = DATE '2022-05-31' 
AND GRAIN ='ACCOUNT'
AND LAYER = 'IDL'
AND SOURCE_CD = 'MTMB'

第二次版本:

select * 
from PPT_TIER4_FTSRB.AUTO_SOURCE_ACCOUNT 
WHERE BUSINESS_DATE = DATE '2022-05-31'
AND GRAIN ='ACCOUNT'
AND LAYER = 'ACQ'
AND SOURCE_CD = 'MTMB'

你可以看到两者之间的唯一区别是LAYER =,IDL在第一个版本和ACQ

我想看看除了列层之外,两者之间有哪些记录匹配(因为它们总是不同的。

我试图做一个内部连接,但它一直运行很长时间:

SELECT * 
FROM 
( select * 
from PPT_TIER4_FTSRB.AUTO_SOURCE_ACCOUNT
WHERE BUSINESS_DATE = DATE '2022-05-31'
AND GRAIN ='ACCOUNT'
AND LAYER = 'IDL'
AND SOURCE_CD = 'MTMB'
) A
INNER JOIN
( select *
from PPT_TIER4_FTSRB.AUTO_SOURCE_ACCOUNT
WHERE BUSINESS_DATE = DATE '2022-05-31'
AND GRAIN ='ACCOUNT'
AND LAYER = 'ACQ'
AND SOURCE_CD = 'MTMB'
) B
ON A.BUSINESS_DATE = B.BUSINESS_DATE
AND A.GRAIN =B.GRAIN
AND A.SOURCE_CD = B.SOURCE_CD

这是因为要进行连接,需要连接的行之间的关系为1:1。你似乎没有这个,也没有给我们任何示例数据来推导一个。

例如:

  • 示例1有第1、2、3行
  • 样本2有行a, b, c
  • 您的结果给出1a,1b,1c,2a,2b,2c,3a,3b,3c

这实际上是一个CROSS JOIN,这是因为您连接的列在每行上总是相同的。

我的建议是选择所有有问题的行并对它们进行排序。然后直观地看看是否有任何你想用连接或聚合分析的模式…

SELECT * 
FROM ppt_tier4_ftsrb.auto_source_account 
WHERE business_date = DATE '2022-05-31'
AND grain ='ACCOUNT'
AND layer IN ('ACQ', 'IDL')
AND source_cd = 'MTMB'
ORDER BY layer, and, some, other, columns

最新更新