mysql - 更新具有重复值的行(在同一列中)

标签 mysql sql

我想更新我的表,以便共享值(在同一列中)的行被标记为这样。

示例表定义:

CREATE TABLE `MyTable` (
  `id`  int NOT NULL ,
  `a`  varchar(10) NOT NULL ,
  `b`  varchar(10) NOT NULL , 
  `state`  tinyint NOT NULL , 
  PRIMARY KEY (`id`) 
) ;

我想更新在同一列中共享值的每一行的“状态”。因此,如果第一行具有“a=AAAA”并且第二行具有相同的“a”值,则两者都应该更新。

我试过了,但它太慢了(不比在 Java 中使用 JDBC 快):

declare mycursor cursor for select id, a, b from mytable;
open mycursor;
repeat
   fetch mycursor into idid, aa, bb;
   update mytable set state=1 where (a=aa, b=bb)
until done end repeat;
close mycursor;

有什么想法可以让这种方式变得更好吗?我已经很多年没做过像样的 SQL 了。

最佳答案

首先尝试查询以查看具有重复项的行 -

SELECT * FROM MyTable t1
  JOIN (
    SELECT a, b FROM MyTable
      WHERE a = 'aa' AND b = 'bb' -- additional condition
      GROUP BY a, b
      HAVING COUNT(*) > 1) t2
  ON t1.a = t2.a AND t1.b = t2.b

试试这个(基于第一个查询)来更新 status 字段 -

UPDATE MyTable t1
JOIN (
  SELECT a, b FROM MyTable
  WHERE a = 'aa' AND b = 'bb' -- additional condition
  GROUP BY a, b
  HAVING COUNT(*) > 1) t2
ON t1.a = t2.a AND t1.b = t2.b
SET t1.state = 1;

关于mysql - 更新具有重复值的行(在同一列中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7243320/

相关文章:

mysql - 如何在表中存储数组 MySQL(对于 NodeJS)

php - mySQL UPDATE table based on SELECT (count) of a different table

sql - 如何在sql server 2005实例中将连接池设置为100

mysql - 一张表中包含零值的 SQL COUNT(*)

mysql - 将范围合并到 MySQL 的单列中?

PhpMyAdmin 导入错误-MySQL 服务器已经消失/无法识别的关键字

php - MySQL 数据库继承时没有在一个表中进行规范化,但我需要对其进行查询

sql - Powershell Get-QADUser 结果到 SQL 表

sql - 在不同的不同行上获取 sum() MySQL

mysql - 根据以前的销售预测库存消耗率