3

我需要在另一个表中给定角色的计数大于 1 的表中将值设置为 1。

表 cursillo.members 具有字段 memid 和 hsd。表 cursillo.teams 具有字段 memid(两者之间的链接),一个字段称为运动,另一个字段称为角色。

我想要完成的是与此类似的事情:

update cursillo.members_eligible p, cursillo.teams pp
   set p.hsd=1     
 where p.memid = pp.memid AND (pp.role = 'HSD' OR pp.role = 'SD')
   and pp.movement = 'Cursillo' AND count(pp.role) > 1;

或这个:

update members_eligibile
   set hsd=1 
  from teams 
 where teams.memid=members_eligible.memid 
   and (teams.role = 'HSD' OR teams.role = 'SD')  
   and teams.movement = 'Cursillo' 
   and count(teams.role) > 1;

换句话说,如果给定的 memid 在 cursillo.teams 表中有多个记录,其中角色的值等于 HSD 或 SD,则将 cursillo.members_eligible.hsd 设置为 1。

我不知道如何处理 count() 部分。

谢谢,迈克·里德

4

2 回答 2

1

可能重复的问题:

MySQL - 在 WHERE 子句中使用 COUNT(*)

尝试使用“有”关键字

以下是链接答案中的相关部分(在本例中为 select 语句):

select gid
from `gd`
group by gid 
having count(*) > 10
order by lastupdated desc

看起来“有”只能在选择语句中使用: http ://www.mysqltutorial.org/mysql-having.aspx

因此,您可能需要让更新的 where 子句包含一个 select 语句:

update members_eligibile
   set hsd=1 
  from teams 
 where teams.memid=members_eligible.memid 
   and (teams.role = 'HSD' OR teams.role = 'SD')  
   and teams.movement = 'Cursillo' 
   and members_eligible.memid IN
   (SELECT members_eligible.memid from members_eligible where teams.memid=members_eligible.memid  having count(teams.role) > 1);

您将不得不调整选择语句,我还没有测试过

于 2012-11-11T23:19:18.043 回答
0

SQL Server 2005+

UPDATE x
SET x.hsd = 1
FROM (SELECT e.hsd, COUNT(*) OVER (PARTITION BY t.role) AS cnt
      FROM teams t JOIN members_eligibile e ON t.memid = e.memid
      WHERE (t.role = 'HSD' OR t.role = 'SD') AND t.movement = 'Cursillo') x
WHERE x.cnt > 1 
于 2012-11-13T07:45:46.970 回答