MySQL-您不能在FROM子句中指定要更新的目标表-子查询有误吗?

时间:2019-07-05 18:50:31

标签: mysql sql subquery mysql-error-1093

我一直在为学校的atm做项目。而老师几乎没有向我们解释SQL。

所以我有一个简单的表:

CREATE TABLE  `VINOVOLUPTATEM`.`TimeWorked` 
(
    `TimeID` INT NOT NULL AUTO_INCREMENT,
    `MNr` INT NOT NULL,
    `Start` TIMESTAMP NOT NULL,
    `End` TIMESTAMP NULL,
    `TotalTime` DOUBLE NULL,

    PRIMARY KEY (`TimeID`),
    FOREIGN KEY (MNr) REFERENCES employees (MNr)
);

该表用于跟踪所有员工的工作时间。

如果我尝试使用以下方法将数据输入到表中:

INSERT INTO TimeWorked (MNr, Start, End, TotalTime)
VALUES (0002,'2019-06-30 08:30:00', '2019-06-30 17:00:00', '8.5');

它工作得很好,但是当我尝试使用此方法自动执行“ TotalTime”时:

INSERT INTO TimeWorked (MNr, Start, End, TotalTime)
VALUES (0001,'2019-06-30 15:00:00', '2019-06-30 18:30:00', 
(TIMESTAMPDIFF(HOUR,(SELECT Start FROM TimeWorked WHERE TimeID = (SELECT MAX(TimeID) FROM TimeWorked)) , 
(SELECT End FROM (SELECT End FROM TimeWorked WHERE TimeID = (SELECT MAX(TimeID) FROM TimeWorked)) AS End)
)));

我不断收到错误消息:

  

错误代码:1093。您无法在FROM子句中指定要更新的目标表'arbeitszeit'

我已经在这里查看了不同的帖子,它似乎与MySQL的子查询限制有关。但是我在这里找不到我的错误。

我该怎么做才能更正查询?

注意:我将部分名称翻译成英文以使其更容易。实表中的名称不代表任何语句。

1 个答案:

答案 0 :(得分:2)

不要将SELECT放在VALUES列表中,请使用INSERT ... SELECT

INSERT INTO TimeWorked (MNr, Start, End, TotalTime)
SELECT 0001,'2019-06-30 15:00:00', '2019-06-30 18:30:00', TIMESTAMPDIFF(HOUR, Start, End)
FROM TimeWorked
ORDER BY TimeId DESC
LIMIT 1

这类似于在尝试执行JOINWHERE时在UPDATE子句中使用DELETE而不是子查询,例如

MySQL Error 1093 - Can't specify target table for update in FROM clause