我有一个场景,我需要找到一个匹配该前缀下所有行和列的前缀。请参阅以下示例,了解比较的工作原理。
我的期望是找到一个匹配的前缀(但不是同名的前缀),它匹配第二个表中的所有行和列。
编写查询以实现此目的的最佳方法是什么。
TABLE1:
accm_pfx accum_no accm_value
-------- -------- ----------
AA00 1 A
AA00 3 B
BB00 2 A
TABLE2:
accm_pfx accum_no accm_value
-------- -------- ----------
CC00 1 A
CC00 3 B
EE00 1 A
EE00 2 B
EE00 3 C
DD00 9 B
预期结果:
table1.accm_pfx matching_accm_pfx table1.accum_no table1.accm_value
-------- --------------- ---------- ----------
AA00 CC00 1 A
AA00 CC00 3 B
答案 0 :(得分:0)
我可能会想念您正在寻找的内容,但听起来您想加入accum_no和accm_value上的两个表?
SELECT
t1.accm_pfx, t2.accm_pfx, t1.accum_no, t1.accm_value
FROM
table1 t1
INNER JOIN
table2 t2
ON
t1.accum_no = t2.accum_no and t1.accm_value = t2.accm_value
答案 1 :(得分:0)
关于什么构成比赛的要求并不清楚,但这会让你大部分都在那里(抱歉愚蠢的别名,你得到的是你付出的代价:)
with results as (
select
table1.accm_prfx as a,
table2.accm_prfx as b,
table1.accum_no,
table1.accum_value,
count(1) over (partition by table1_a.accm_prfx) / count(1) over (partition by table1.accm_prfx, table1_a.accum_no, table1_a.accum_value) as TotalRowsA,
count(1) over (partition by table1.accm_prfx, table2.accm_prfx) as matches,
count(1) over (partition by table2_a.accm_prfx) / count(1) over (partition by table2.accm_prfx, table2_a.accum_no, table2_a.accum_value) as TotalRowsB
from table1 inner join table2 on table2.accum_no = table1.accum_no and table1.accum_value = table2.accum_value
inner join table1 table1_a on table1_a.accm_prfx = table1.accm_prfx
inner join table2 table2_a on table2_a.accm_prfx = table2.accm_prfx
)
select distinct a, b, accum_no, accum_value from results
where
totalrowsa = totalRowsB
and matches = power(totalRowsA,3)
步骤1:找到每个前缀的匹配项和表A和B中的总行数。 第2步:匹配的总数应该是行数的完美立方体。 (2匹配table1中的* 2行* table2中的2行。)