Вставить значение из выбора в той же таблице - PullRequest
0 голосов
/ 13 октября 2018

table:message [id,username,userid,message,type,timediff,timestamp]

У меня есть таблица с именем message.Когда сообщение запускается, создается новая строка с отметкой времени и нулевым временем.

Когда сообщение заканчивается, я хотел бы вставить его в строку с разницей во времени.

Например, Начало 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

1 Ответ

0 голосов
/ 13 октября 2018

Желательно использовать синтаксис 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 , где вы можете увидеть это в действии.

...