2015-11-11 49 views
0

這是一個投票系統,候選人可以從不同(有限)的地方進行投票。我想要每個候選人每個地方的投票數量。 我有3個表MySQL在n到n的關係表上加入keping NULL值

TABLE candidate 
------------------ 
id 
name 

TABLE place 
------------------ 
id 
label 

TABLE vote 
------------------ 
id 
id_candidate 
id_vote 
no_votes // represents the amount of votes in this place for that particular candidate 

假設我有10名候選人和15個不同的地方,我試圖做一個查詢,將返回10 * 15 = 150行,即使沒有票,保持NULL值在關係表中不存在的id(我可以用0替換)。

但我不是做正確的查詢 這裏是我迄今取得的查詢(我已經嘗試了很多修改,內,外連接......但是毫無效果)

SELECT * 
FROM votes 
RIGHT JOIN candidate ON candidate.id = candidate_id 
LEFT JOIN palce ON place.id = place_id 
+0

我猜你想LEFT JOIN。 – jarlh

+0

你能向我們展示你的查詢嗎?你可能需要一個外部連接 –

+0

我編輯了我的文章。並添加了我的查詢。 – Xsmael

回答

1

首先,如果你想要每個候選人的票數,那麼你應該考慮「聚合」。

其次,不要在查詢中混合左右連接。這只是令人困惑。從希望保留所有行的表開始,然後使用left join

所以,這樣的事情:

SELECT c.*, 
     SUM(p.place_name = 'place1') as place1, 
     SUM(p.place_name = 'place2') as place2, 
     SUM(p.place_name = 'place3') as place3 
FROM candidate c LEFT JOIN 
    votes v 
    ON c.id = v.candidate_id LEFT JOIN 
    place p 
    ON p.id = v.place_id 
GROUP BY c.id; 
+0

的最佳方式,但我的餐桌位置有大約300行,這將是一個長時間的查詢!那很好嗎? – Xsmael

+0

如果這是你需要做的,那麼「好」將是一個貼切的形容詞。 –

1

考慮:

TABLE vote 
------------------ 
id     PK 
id_candidate  FK to candidate 
id_vote    FK to place 
no_votes 

-

​​