我认为这可能实际上是你想要的。我的表中有id=1
3次,所以mcount
等于3
。由于where条件,ID=2
的行未更新。
update table1
join (select id, count(*) as ct from table1 group by id) as ct_tbl
set mcount = ct_tbl.ct
where table1.id=1
mysql> select * from table1;
+------+--------+
| id | mcount |
+------+--------+
| 1 | 3 |
| 1 | 3 |
| 1 | 3 |
| 2 | 0 |
+------+--------+
4 rows in set (0.00 sec)
我不想劫持对方的回答,因为这是完全正确的,但我认为它需要更多的解释。
UPDATE `table1` SET `mcount` = CASE
WHEN id = 1 THEN 1
WHEN id = 1 THEN 2
END
WHERE id in (1)
即相当于...(伪)
in the table table1
where the id = 1
if id = 1 then set mcount = 1
if id = 1 then set mcount = 2
因为where
声明,我们已经知道,我们只有在id=1
选择行。那些if
语句将会相互覆盖。我真的不知道你在做什么,但通常...
以下将添加一个到mcount
UPDATE `table1`
SET `mcount` = mcount + 1;
WHERE id in (1)
以下将切换mcount
值
UPDATE `table1`
SET `mcount` = CASE WHEN mcount = 1 THEN 2
WHEN mcount = 2 THEN 1 END
WHERE id in (1)
以下将切换mcount
值
UPDATE `table1`
SET `mcount` = CASE WHEN other_field = 'Y' THEN 1
WHEN other_field = 'N' THEN 2 END
WHERE id in (1)
与多个ID
值的工作...
UPDATE `table1`
SET `mcount` = CASE WHEN id = 1 THEN 1
WHEN id = 2 THEN 2
WHEN id = 3 THEN 3 END
WHERE id in (1,2,3)
这是一样的...
UPDATE `table1`
SET `mcount` = id
WHERE id in (1,2,3)
现在真正的问题是... 如果ID = 1那么mcount应该是什么?
也....
set @row:=0;
update table1
set mcount = @row:[email protected]+1
where id = 1;
mysql> select * from table1;
+------+--------+
| id | mcount |
+------+--------+
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |
| 2 | 0 |
+------+--------+
4 rows in set (0.00 sec)
您可能需要以不同的方式构建您的查询,但由于它不是清楚你想要达成的目标,这将很难说明如何。 – 2014-10-06 03:33:03
你想要它是什么?你想要1或2吗?你要求它为你选择,而电脑不会那样工作。 – siride 2014-10-06 03:45:35
这是甚么意思......? _有些时候我的单个查询包含两次相同的ID'LIKE THIS'_ – 2014-10-06 03:53:11