0

この他の質問と同じ状況ですが、行を選択したくありません。これらの行を更新したいのです。

Scott Saunders が作成したソリューションを使用しました。

select * from table where email in (
    select email from table group by email having count(*) > 1
)

それはうまくいきましたが、これらのエントリの行の値を変更/更新したかったので、試しました:

UPDATE `members` SET `banned` = "1" WHERE `ip` IN (
    SELECT `ip` FROM `members` GROUP BY `ip` HAVING COUNT(*) > 1
)

しかし、私はこのエラーが発生します:

FROM 句で更新対象のテーブル 'members' を指定することはできません

4

2 に答える 2

6

中間サブクエリを使用して、1093 エラーを回避します。

UPDATE `members` 
   SET `banned` = '1' 
 WHERE `ip` IN (SELECT x.ip
                  FROM (SELECT `ip` 
                          FROM `members` 
                      GROUP BY `ip` 
                        HAVING COUNT(*) > 1) x)

それ以外の場合は、派生テーブルで JOIN を使用します。

UPDATE MEMBERS 
  JOIN (SELECT `ip` 
          FROM `members` 
      GROUP BY `ip` 
         HAVING COUNT(*) > 1) x ON x.ip = MEMBERS.ip
   SET banned = '1' 
于 2010-09-18T18:36:57.780 に答える
0

membersこのエラーは、テーブルの基準に基づいてテーブルを更新できないことを意味しmembersます。あなたの場合、membersテーブルのサブクエリに基づいてテーブルを更新しようとしていmembersます。その過程で、そのテーブルを変更しています。卵のパラドックスの前のニワトリのように考えてください。

その更新ステートメントを実行するには、一時的な参照テーブルを作成するか、IP 範囲を保存して貼り付ける必要があります。

于 2010-09-18T18:32:01.690 に答える