3

別のテーブルの特定のロールのカウントが > 1 であるテーブルの値を 1 に設定する必要があります。

テーブル cursillo.members にはフィールド memid と hsd があります。テーブル cursillo.teams にはフィールド memid (2 つの間のリンク) があり、movement と呼ばれるフィールドと role と呼ばれる別のフィールドがあります。

私が達成しようとしているのは、次のようなものです。

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(*) を使用する

「having」キーワードを使用してみてください

リンクされた回答の関連セクションは次のとおりです (この場合は select ステートメント)。

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

ただし、「having」は一部のステートメントでのみ使用できるようです: 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);

selectステートメントを調整する必要があります。テストしていません

于 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 に答える