2013-05-17 127 views
4

將這兩個SQL語句合併爲一個的最佳方式是什麼?我嘗試過使用聯盟,但似乎無處可去。將這兩個SQL語句合併爲一個

select id as id from likes where type=1; 

select sum(votes) as votes from likes where parent=id; 

這裏是likes表:

id type parent country votes 
1  1  0  US  0 
2  2  1  US  6 // This + 
19  3  1  US  3 // This 
3  3  2  US  3 
7  3  2  US  3 
4 10  3  US  1 
5 10  3  US  1 
6 10  3  US  1 
10 10  7  US  1 
9 10  7  US  1 
8 10  7  US  1 
20 10  19  US  1 
21 10  19  US  1 
22 10  19  US  1 

這是我想要達到的效果:

id | votes 
--------------- 
1 | 9 
+0

他們做不同的事情。你想達到什麼目的? –

+0

我已經更新了表格和我正在嘗試完成的問題。 – Norman

回答

5

試試這個:

SELECT 
    l1.id, 
    SUM(l2.votes) AS Totalvotes 
FROM likes AS l1 
INNER JOIN likes AS l2 ON l1.id = l2.parent 
WHERE l1.type = 1 
GROUP BY l1.id; 

看到它在此採取行動:

這會給你:

| ID | TOTALVOTES | 
------------------- 
| 1 |   9 | 
+0

您的解決方案爲我提供了每一行。 – Norman

+0

是的。謝謝。這很好。一件小事,在我走之前,如果我需要指定另一個條件,我該在哪裏做?像這樣:WHERE l1.type = 1和l1.country ='us''? – Norman

+0

@Norman - 是的,像這樣'WHERE l1.type = 1 and l1.country ='us'':http://sqlfiddle.com/#!2/132fe/2 –

2
SELECT SUM(votes) AS votes 
FROM likes 
WHERE parent IN (SELECT id FROM likes WHERE type=1) 

HTH

0

你可以試試這個

select id,sum(votes) as votes from likes where type=1 and parent=id; 

希望這有助於

+0

這應該是有效的,我不知道爲什麼我得到NULL NULL – Norman

+0

它不會工作,因爲你將在同一行內操作,即你真的在尋找父母和id相等的行。您需要在同一個表上使用子查詢或聯接 - 無需避免。 –

1

這應該解決您的問題,我相信:

SELECT parent AS id, SUM(votes) AS votes FROM likes WHERE parent IN (SELECT id FROM likes WHERE type = 1) GROUP BY parent; 
+0

0 | 0.你見過我更新的問題嗎? – Norman

+0

對不起,我沒有把這個問題籠罩在這個問題上。更新後的答案*應該*起作用,儘管我現在無法真正測試它。 –

+0

現在就開始工作。只是一些測試。 – Norman