我想更新我的表,以便共享值(在同一列中)的行被标记为这样。
示例表定义:
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/