0

MySQL Update ステートメントに問題があります。テーブルには 100.000 を超えるエントリがあります。したがって、私のアプローチは成功しませんでした。(下記参照)

まず、値の数を数えたいと思います (これは簡単です)。

SELECT values1 ,count(values1) FROM table
GROUP BY value1
HAVING COUNT(value1) <= 1000;

次に、<= 1000 回しか表示されない列 values1 の一部の値を置き換えたいと考えています。

だから私はこれらのステートメントを試しました:

Update table as t
SET t.value1 = "limitAmount" 
WHERE EXISTS (select value1 from 
(select * from table) as f Group by f.value1
Having count(f.value1) <= 1000);

この SQL ステートメントを試したところ、次のメッセージが表示されました。

エラー コード 1205。ロック待機タイムアウトを超えました。トランザクションを再開してみてください。

4

2 に答える 2

1

これを試して

Update 
  table as t 
SET 
  t.value1 = "limitAmount" 
WHERE 
  EXISTS (select value1 from (select * from table) as f where f.value1 = t.value1 Group by f.value1 Having count(f.value1) <= 1000);

通知where f.value1 = t.value1条件subquery

于 2013-05-04T19:27:31.157 に答える
0

このステートメントは機能します。

UPDATE test SET val="BLUB" WHERE val IN (SELECT val FROM (SELECT val FROM test GROUP BY val HAVING COUNT(val) <2000) war);

別:

  1. 別のテーブルに値を追加する INSERT INTO helpTable (Value1) (select val FROM test Group by val カウント(val) <= 2000);

  2. Update test as t SET t.val = "BLUB" WHERE NOT EXISTS (Select Value1 FROM helpTable as h WHERE t.val = h.Value1); を選択します。

于 2013-05-05T13:02:16.627 に答える