1

ここに私が持っているテーブルがあります:

  1. ABタプルテーブル
  2. A.id と B.id を持つエントリを持つ C テーブル
  3. C.id とブール値フィールド "open" を持つエントリを持つ D テーブル

「open」= true で、同じ A.id と B.id を持つ C.id を持つ D テーブルのすべてのエントリをカウントしたい

クエリで、カウント、共通 A.id、および共通 B.id を 1 行で返すようにしたい

たとえば、Dテーブル

D.id = 1, open=true, D.CID = 2
D.id = 2, open=true, D.CID = 3
D.id = 3, open=true, D.CID = 3
D.id = 4, open=true, D.CID = 4

Cテーブル

C.id = 2, A.id = 3, B.id = 5 
C.id = 3, A.id = 3, B.id = 5
C.id = 4, A.id = 4, B.id = 6

Bc D の最初の 3 つのエントリには、同じエントリでカウントされる同じ AID と BID を持つ CID があります。したがって、クエリは次の 2 つのエントリを返す必要があります。

1. count = 3  A.id = 3  B.id = 5
2. count = 1  A.id = 4  B.id = 6

次の疑似コードのように動作することを考えたので、AB のタプル テーブルを作成しました。

For each entry i in tuple Table AB 
   for each entry j in Table C 
      for each entry k in Table D 
          if j.AID AND j.BID equal to i.AID and i.BID
              And if k.CID = j.id
                 Then returnHash[i] = returnHash[i] + 1    

――必要ないかもしれませんが

4

1 に答える 1

1
SELECT
  COUNT(*),
  c.aid,
  c.bid
FROM
  d INNER JOIN c
ON
  d.cid = c.id
WHERE
  d.open
GROUP BY
  c.aid,
  c.bid;
于 2012-09-13T13:46:40.163 に答える