在同一个表中插入select中的值

6pp0gazn  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(319)

table:message [id,username,userid,message,type,timediff,timestamp] 我有一张表叫message。当消息启动时,会创建一个新行,timestamp和timediff为null。
当消息结束时,我想把它插入到一行中的时间差。
eg启动 1,username,1234,message,start/s,null,000001 结束: 2,username,1234,message,end/s,**20**,000021 ```
INSERT into Messages.message (username,userid,message,type,timediff)
values ("username","1234","Test","Ended/S",(
select sum(unix_timestamp(CURRENT_TIMESTAMP())-unix_timestamp(timestamp))
from messages
WHERE userid = "1234"
AND type = "Started/S"
Order by timestamp desc
limit 1))

我也有一个错误,我无法理解 `Error Code: 1093. You can't specify target table 'message' for update in FROM clause` 
xt0899hw

xt0899hw1#

最好使用 INSERT ... SELECT 这样的查询的语法。我认为这样做应该奏效:

insert into message (id, username, userid, message, type, timediff)
select id, username, userid, message, 'Ended/S', unix_timestamp() - unix_timestamp(tstamp)
from message m
where tstamp = (select MAX(tstamp) 
                from message m1 
                where m1.userid=1234 and m1.type='Started/S');

我在sqlfiddle上做了一个小演示,您可以看到它的运行。

相关问题