1

多対多の関係を持つ 2 つのテーブルがあります:
tableA (ida、valA)
tableB (idb、valB)
tableAB (ida、idb)

すべてのタプルで返されるクエリが 1 つ必要です:
(ida、idb、関連するかどうかにかかわらず 0/1)

入力/出力の例を次に示します

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

必要なのは、すべての可能なペアを持つ駆動テーブルです。これを取得する 1 つの方法は、クロス結合を使用して 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 に答える