0

最初に、ひどいタイトルについてお詫びします。私の問題を明確にするためのより良い方法を考えることができませんでした。(より良い代替案を自由に提案してください)

基本的に、「カウント」列を持つテーブルがあります。上位の値を持つ10行を除いて、すべてのカウントをゼロにリセットしたいと思います。それらを0にリセットしてほしい。

複数のクエリを記述せずにこれを実現するにはどうすればよいですか?

更新 私は今、次のように私のクエリを持っています

UPDATE covers AS t1 
  LEFT JOIN (SELECT t.cover_id 
               FROM covers t 
               ORDER BY t.cover_views DESC 
               LIMIT 10) AS t2 ON t2.id = t.id
   SET cover_views = 0
   WHERE t2.id IS NULL

エラーが発生します#1054 - Unknown column 't2.id' in 'where clause'-理由は何ですか?

私も同じ結果で以下を試しました

UPDATE covers t1 
  LEFT JOIN (SELECT t.cover_id 
               FROM covers t 
               ORDER BY t.cover_views DESC 
               LIMIT 10) t2 ON t2.id = t.id
   SET t1.cover_views = 0
   WHERE t2.id IS NULL
4

3 に答える 3

2

使用する:

UPDATE TABLE t1 
  LEFT JOIN (SELECT t.id 
               FROM TABLE t 
           ORDER BY t.id DESC 
              LIMIT 10) t2 ON t2.id = t1.id
   SET TABLE.count = 0
 WHERE t2.id IS NULL
于 2010-09-01T21:26:46.423 に答える
1

試す:

update <table> t 
left outer join 
(
select id from <table> order by <counter> desc limit 10
) c on c.id = t.id 
set 
 <counter> = 0
where 
 c.id is null;
于 2010-09-01T21:28:25.543 に答える
0

サブクエリを使用できます。

update A set count = 0 where A.id not in 
(select id from A order by count desc limit 10)
于 2010-09-01T21:20:34.533 に答える