我有以下mysql表:
=============================
id | vid | date | num |
=============================
1 | 1 | 2017-01-01 | |
2 | 1 | 2017-02-20 | |
3 | 2 | 2017-02-25 | |
4 | 1 | 2017-03-05 | |
=============================
我必须以这样的方式更新num
列,如果日期最早为同一vid
,那么num列将为1,否则它将为2.因此,在更新之后数据库/表将是:
=============================
id | vid | date | num |
=============================
1 | 1 | 2017-01-01 | 1 |
2 | 1 | 2017-02-20 | 2 |
3 | 2 | 2017-02-25 | 1 |
4 | 1 | 2017-03-05 | 2 |
=============================
由于2017-01-01
是vid=1
的最早日期,因此num
为1
。因此vid=1
的所有其他行都是2
。另一方面,对于vid=2
,num列将为1,因为它是唯一一行vid=2
。
如何创建单个mysql查询,以便它会自动根据上述逻辑自动更新整个表?
答案 0 :(得分:1)
假设你的桌子是“你的桌子”:
UPDATE
yourTable inner join (select *,IF(date=(select min(date)
from yourTable
where vid=a.vid
group by vid), 1, 2) as actualNum
from yourTable a) abc
ON yourTable.id = abc.id
SET yourTable.num = abc.actualNum;
答案 1 :(得分:-1)
update mytable as m
set num = case when date =
(select min(date) from mytable m2 where m2.id = m.id)
then 1 else 2 end
......我想
或者
UPDATE m
set num = case when date =
(select min(date) from mytable m2 where m2.id = m.id)
then 1 else 2 end
FROM mytable m