我有一个关于表间比较的问题。
我想用不同的过滤条件比较同一表中的数据:
第一个版本:
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