我有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
答案 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中是否存在匹配的记录。