2012-12-18 79 views
1

我有一个名为'人'的表,人们有一个名为'出现'的关联表。我想通过在MySQL中使用左连接选择的'appearance_count'来更新人员表。我只是在语法上遇到了一些麻烦。我将在哪里将我的更新语句放在下面的查询中。我尝试了类似这样的更新,但我一直收到一个错误'无法更新与选定表格相同的表格'(或者是那种效果)。这是我在它的原料选择表单查询:更新在哪里选择计数mysql

SELECT  people.*, 
COUNT(appearances.id) as app_count, 
FROM   `people` 
INNER JOIN `appearances` 
ON   `appearances`.`person_id` = `people`.`id` 
GROUP BY  `people`.`id` 
HAVING  app_count > 0; 

如何将采取“APP_COUNT”,并设置people.appearance_count是价值?

回答

4

我觉得HAVING是没有必要的,因为它会筛选具有大于零的COUNT和你使用LEFT JOIn与表PEOPLE加入它的记录。

UPDATE people a 
     LEFT JOIN 
     (
      SELECT b.id, COUNT(c.person_ID) totalCOunt 
      FROM people b 
        INNER JOIN appearances c 
         ON c.person_id = b.id 
      GROUP BY b.id 
     ) d ON a.ID = d.ID 
SET  a.appearance_count = d.totalCount 
+1

谢谢你,这是它......虽然我认为我在第8行你的意思是b.id,而不是a.id,对不对? – jdkealy

+0

是的,抱歉的错字。 –