Mysql - 您不能在 FROM 子句中指定更新目标 table - 子查询误解?
Mysql - You can't specify target table for update in FROM clause - Subquery misunderstanding?
我正在为学校的 atm 做一个项目。老师们几乎没有向我们解释SQL。
所以我有一个简单的 table:
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)
);
table 用于跟踪所有员工的工作时间。
如果我尝试使用以下方法将数据输入 table:
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)
)));
我一直收到错误消息:
Error Code: 1093. You can't specify target table 'arbeitszeit' for update in FROM clause
我已经看过这里的不同帖子,它似乎与 MySQL 的子查询限制有关。但是我在这里找不到我的错误。
我需要做什么才能更正查询?
注意:为了方便起见,我将部分名称翻译成英文。 table中真实的名字不代表任何陈述。
不要将 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
这类似于在尝试执行 UPDATE
或 DELETE
时在 WHERE
子句中使用 JOIN
而不是子查询,如
MySQL Error 1093 - Can't specify target table for update in FROM clause
我正在为学校的 atm 做一个项目。老师们几乎没有向我们解释SQL。
所以我有一个简单的 table:
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)
);
table 用于跟踪所有员工的工作时间。
如果我尝试使用以下方法将数据输入 table:
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)
)));
我一直收到错误消息:
Error Code: 1093. You can't specify target table 'arbeitszeit' for update in FROM clause
我已经看过这里的不同帖子,它似乎与 MySQL 的子查询限制有关。但是我在这里找不到我的错误。
我需要做什么才能更正查询?
注意:为了方便起见,我将部分名称翻译成英文。 table中真实的名字不代表任何陈述。
不要将 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
这类似于在尝试执行 UPDATE
或 DELETE
时在 WHERE
子句中使用 JOIN
而不是子查询,如
MySQL Error 1093 - Can't specify target table for update in FROM clause