mySQL 更新列检查其他字段值
mySQL Update column checking other field value
例如,我在 table 中有我的应用程序配置值。
id appid keyValue dataValue
1 app1 hitcount 3
2 app1 lasthit 2022-03-23 13:15:56
我试图在 MySQL 中编写一个查询,以在 lasthit 日期更改时重置 hitcount = 0 例如,如果 23 更改为 24 我想重置 0 hitcount 我写了这个查询但出现错误 [错误代码:1093.].
update appconfig
SET dataValue = IF ( (select day(dataValue)
from appconfig
where appid = 'app1'
and keyValue = 'lasthit'
) > day(utc_timestamp()),0,dataValue
)
where appid = 'app1'
and keyValue = 'hitcount'
请指教
您可以使用 INNER JOIN
但是这样的查询属于 EVENT HANDLER
CREATE TABLE appconfig (
`id` INTEGER,
`appid` VARCHAR(4),
`keyValue` VARCHAR(8),
`dataValue` VARCHAR(10)
);
INSERT INTO appconfig
(`id`, `appid`, `keyValue`, `dataValue`)
VALUES
('1', 'app1', 'hitcount', '3'),
('2', 'app1', 'lasthit', '2022-03-23'),
('3', 'app2', 'hitcount', '3'),
('4', 'app2', 'lasthit', '2022-03-22');
UPDATE appconfig a1
INNER JOIN (SELECT `appid` FROM appconfig WHERe DATE(`dataValue`) < current_date()
AND `keyValue` = 'lasthit' ) a
ON a.`appid` = a1.`appid`
SET
dataValue = 0
WHERE
keyValue = 'hitcount'
SELECT * FROM appconfig
id | appid | keyValue | dataValue
-: | :---- | :------- | :---------
1 | app1 | hitcount | 3
2 | app1 | lasthit | 2022-03-23
3 | app2 | hitcount | 0
4 | app2 | lasthit | 2022-03-22
db<>fiddle here
例如,我在 table 中有我的应用程序配置值。
id appid keyValue dataValue
1 app1 hitcount 3
2 app1 lasthit 2022-03-23 13:15:56
我试图在 MySQL 中编写一个查询,以在 lasthit 日期更改时重置 hitcount = 0 例如,如果 23 更改为 24 我想重置 0 hitcount 我写了这个查询但出现错误 [错误代码:1093.].
update appconfig
SET dataValue = IF ( (select day(dataValue)
from appconfig
where appid = 'app1'
and keyValue = 'lasthit'
) > day(utc_timestamp()),0,dataValue
)
where appid = 'app1'
and keyValue = 'hitcount'
请指教
您可以使用 INNER JOIN
但是这样的查询属于 EVENT HANDLER
CREATE TABLE appconfig ( `id` INTEGER, `appid` VARCHAR(4), `keyValue` VARCHAR(8), `dataValue` VARCHAR(10) ); INSERT INTO appconfig (`id`, `appid`, `keyValue`, `dataValue`) VALUES ('1', 'app1', 'hitcount', '3'), ('2', 'app1', 'lasthit', '2022-03-23'), ('3', 'app2', 'hitcount', '3'), ('4', 'app2', 'lasthit', '2022-03-22');
UPDATE appconfig a1 INNER JOIN (SELECT `appid` FROM appconfig WHERe DATE(`dataValue`) < current_date() AND `keyValue` = 'lasthit' ) a ON a.`appid` = a1.`appid` SET dataValue = 0 WHERE keyValue = 'hitcount'
SELECT * FROM appconfig
id | appid | keyValue | dataValue -: | :---- | :------- | :--------- 1 | app1 | hitcount | 3 2 | app1 | lasthit | 2022-03-23 3 | app2 | hitcount | 0 4 | app2 | lasthit | 2022-03-22
db<>fiddle here