创建一个完整的多2多个矩阵

时间:2012-05-22 13:29:19

标签: sql oracle oracle11g

我有2张表,有很多2对多的关系:
tableA(ida,valA)
tableB(idb,valB)
tableAB(ida,idb)

我需要一个应该在每个tupple中返回的查询:
(如果相关或不相关,则为ida,idb,0/1)

这是一些输入/输出示例: 的表A

ida   valA
1     b
2     s
3     l

tableB的

idb   valB
11    aaa
22    bbb
33    ccc

tableAB

ida   idb
1     11
2     33

预期结果:

ida      idb      is_exists
1        11       1
2        11       0
1        33       0
2        33       1

请注意,我不需要总是为0的排列,例如ida = 3或idb = 22
这是因为它意味着在矩阵中整个行或列都是0(这表明该行与另一个表没有任何关系)

   \ ida |     |     |  
idb \    |  1  |  2  |  3
---------------------------
11       |  1  |  0  |  0
---------------------------
22       |  0  |  0  |  0
---------------------------
33       |  0  |  1  |  0

1 个答案:

答案 0 :(得分:4)

您需要的是一张具有所有可能配对的驾驶台。获得此功能的一种方法是使用交叉连接来自TableA和TableB:

select allAB.aid, allAB.bid, max(case when ab.aid is not null then 1 else 0 end) as HasPair
from (select distinct a.id as aid, b.id as bid
      from TableA a cross join
           TableB b
     ) as allAB left outer join
     TableAB ab
     on allAB.aid = ab.aid and
        allAB.bid = ab.bid
group by allAB.aid, allAB.bid

之后,查询只会汇总并确定TableAB中是否存在匹配的记录。