0

以下 SQL 命令列出了hash可以在多个对象上找到的值。

SELECT *  FROM (
  SELECT 
    MIN(id) AS id, 
    hash, 
    status, 
    count(*) AS count 
  FROM foobar 
  GROUP BY hash 
  ORDER BY count
) AS t 
WHERE count > 1;

...

+------+----------------------------------+--------+-------+
|   id | hash                             | status | count |
+------+----------------------------------+--------+-------+
| 4523 | e4266978b1d99dffbf3a6e0b880a2c5e |      0 |     3 |
|  828 | 9414c7478416b7a40846d66e12df9370 |      0 |     4 |
|  293 | bfc742499fd97c4c8e36f57cdd0fa0e0 |      0 |     5 |
|  244 | ec408e4678789f7983f83a9c330ab8e4 |      0 |    14 |
+------+----------------------------------+--------+-------+
4 rows in set (0.02 sec)

我想更新status组中每个项目的。对于单个组,可以按如下方式完成:

UDPATE foobar SET status = 9 WHERE hash = "e4266978b1d99dffbf3a6e0b880a2c5e";

如何更新status每 26 个单独项目的 该解决方案至少应该在 MySQL 上运行。

4

3 回答 3

1

您可以使用

UPDATE foobar
SET status = 9 
WHERE hash IN (
  SELECT hash FROM (
    SELECT 
      hash, 
      count(*) AS count 
    FROM foobar 
    GROUP BY hash 
  ) AS t 
  WHERE count > 1
)

它将在 MySQL 中工作,因为 MySQL 将为带有GROUP BY.

于 2013-08-09T12:45:26.497 回答
0
UPDATE foobar t1
    LEFT OUTER JOIN foobar t2 ON t1.id <> t2.id AND t1.hash = t2.hash
WHERE t2.id IS NOT NULL
SET t1.status = 9
于 2013-08-09T13:06:11.527 回答
0

查找所有重复的哈希,然后将其用作更新查询的条件:

UPDATE  foobar
  SET   status = 9
  WHERE hash IN (SELECT  hash
                   FROM  foobar 
                   GROUP BY hash 
                   HAVING COUNT(*) > 1)
于 2013-08-09T12:43:33.823 回答