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