2012-09-13 51 views
1

這裏是我的表有:PostgreSQL的困難(對我來說)查詢

  1. AB元組表
  2. 它有A.id和B.id其中有條目
  3. d表項
  4. Ç表與C.id和一個布爾場「打開」

我希望計算d表中的所有條目,其中「開」 =真,其中有一個C.id具有相同A.id和B. ID

我想查詢返回的計數,公共A.id和公共B.id在單行

例如 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.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  

-might沒有必要雖然

回答

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; 
+0

非常好!完美工作 – user1175817

+0

我有一個擴展問題,我想同樣的事情,但現在與結果中的另一列,即返回的計數值和c中的字段中存在的值之間的差異。我也會將此作爲另一個問題發佈 – user1175817

+0

也如何獲得與這些行相關的表和B表中的其他字段。我想獲取字段A.name和B.status並將其添加到行 – user1175817