2013-05-20 147 views
1

符合下表:更新查詢不更新幾行

"id" "type" "parent" "country" "votes" "perCent" 
"1"  "1"  "0"   "US"  "0"  "0"//Appears as 0, should be 12 
"2"  "2"  "1"   "US"  "0"  "0"//Appears as 0, should be 8 
"3"  "3"  "2"   "US"  "4"  "0" 
"7"  "3"  "2"   "US"  "4"  "0" 
"19" "3"  "1"   "US"  "4"  "0" 
"4183" "10" "3"   "US"  "2"  "0" 
"4184" "10" "3"   "US"  "2"  "0" 
"4185" "10" "7"   "US"  "2"  "0" 
"4186" "10" "7"   "US"  "2"  "0" 
"4187" "10" "19"  "US"  "2"  "0" 
"4188" "10" "19"  "US"  "2"  "0" 

爲什麼行ID 1和行ID 2顯示爲0,當我運行下面的查詢更新總額是多少?

UPDATE likesd a 
     INNER JOIN 
     (
      SELECT parent, country, SUM(votes) totalVotes 
      FROM likesd 
      GROUP BY parent 
     ) b ON a.id = b.parent and a.country = b.country 
SET  a.votes = b.totalVotes; select * from likesd; 

當我這樣做:

SELECT parent, country, SUM(votes) totalVotes 
      FROM likesd 
      GROUP BY parent; 

我可以看到在結果中的所有行,但頂部的兩個不更新。

我錯了我的SQL?我如何設置這個權利?另外,你是否看到我正在使用的SQL中的任何問題?

+0

有您測試上面的查詢,,,我覺得有在內部查詢錯誤。並請提供有關您的問題的好信息 – Anvesh

+0

是的,我測試過了。它工作正常,除了最後兩行。 – jmenezes

+0

@jmenezes請注意,有關遞歸的選擇包括構造一個sproc,處理應用程序級別的邏輯,或從邊界列表/鄰接模型切換到例如嵌套集合。< - 在這種情況下,我認爲這將是我的偏好。請記住,內容和層次模型可以(也可能應該)分解成單獨的實體。 – Strawberry

回答

1

你在更新時也應該把國家也放在一組中。

UPDATE likesd a 
     INNER JOIN 
     (
      SELECT parent, country, SUM(votes) totalVotes 
      FROM likesd 
      GROUP BY parent, country 
     ) b ON a.id = b.parent and a.country = b.country 
SET  a.votes = b.totalVotes; select * from likesd; 

編輯 你可以嘗試在一些意想不到的結果情況下,下面的更新語句 -

UPDATE Likesd a 
    SET Voltes = (SELECT SUM(Votes) 
        FROM Likesd b 
        WHERE b.PARENT = a.Id 
        AND b.Country = a.Country) 
+0

我試過這樣做。那也行不通。 – jmenezes

+0

@jmenezes你可以使用第二個查詢來更新你的表格。 我剛剛udpated和測試此查詢。 –