Mysql 使用同一表中多个其他列的组合结果更新列

Mysql 使用同一表中多个其他列的组合结果更新列,mysql,Mysql,我试图将SELECT的结果合并到同一个表中的单个列中(从单个列移动到在JSON对象中存储多个字段)。我的SELECT查询工作正常,但当我尝试将其与更新相结合时,我得到: 无法在FROM子句中为更新指定目标表“app\u config” 我不确定我做错了什么(而且我不太擅长SQL),所以任何帮助都将不胜感激 组合SQL: UPDATE app_config SET sms_config = ( SELECT CONCAT( '{"user_name":"', app_id, '","us

我试图将SELECT的结果合并到同一个表中的单个列中(从单个列移动到在JSON对象中存储多个字段)。我的SELECT查询工作正常,但当我尝试将其与更新相结合时,我得到:

无法在FROM子句中为更新指定目标表“app\u config”

我不确定我做错了什么(而且我不太擅长SQL),所以任何帮助都将不胜感激

组合SQL:

UPDATE app_config
SET sms_config = ( 
    SELECT CONCAT( '{"user_name":"', app_id, '","user_id":', sms_user_id, ',"user_auth":"', sms_user_auth, '"}' ) 
    FROM app_config
    WHERE sms_user_id IS NOT NULL AND sms_user_id > 0 
)

我想这就是你想要的

UPDATE app_config
SET sms_config = CONCAT( '{"user_name":"', app_id, '","user_id":'
                      , sms_user_id,  ',"user_auth":"', sms_user_auth, '"}')
WHERE sms_user_id > 0 

这给了我0行受影响的数据。仅我以前的SELECT查询(没有更新)返回15行。不应该有一个选择的地方吗?你不需要一个选择时更新。您的意思是,这将从应用程序配置中返回15:
选择计数(*),其中sms\u用户id不为空且sms\u用户id>0
?正确。15根据您的选择。我不知所措:当
sms\u user\u id>0
时,此子句
sms\u user\u id不为NULL
应该是不相关的-根据定义,sms\u user\u id必须为非NULL,大于运算符才能返回true。我更改了WHERE子句的解决方案。是的,我认为您不需要IS not NULL是正确的,但即使使用它,我仍然会受到0行的影响。如果我只是从应用程序配置中运行
选择COUNT(*),其中sms\u user\u id>0
我也会得到15。