1

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

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

这是一些输入/输出示例: tableA

ida   valA
1     b
2     s
3     l

表B

idb   valB
11    aaa
22    bbb
33    ccc

表AB

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
4

1 回答 1

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中是否有匹配的记录。

于 2012-05-22T13:36:00.453 回答