【发布时间】:2019-11-16 09:06:48
【问题描述】:
我被困在为学校 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 的子查询限制有关。但是我在这里找不到我的错误。
我必须做些什么来更正查询?
注意:为了方便起见,我将部分名称翻译成英文。真实表中的名称不代表任何语句。
【问题讨论】:
-
您不应该在
insert上收到该错误。你桌上有触发器吗? -
@Gordon Linoff 不完全确定触发器是如何工作的,但我查了一下并没有指定任何触发器。除了此处显示的代码之外,没有其他代码链接到此表。
-
您的查询中的
arbeitszeit表在哪里?那是TimeWorked的真名吗? -
@GordonLinoff 我刚刚在测试表上重现了错误。
-
@Kazzed:如果您关心的是从开始到结束自动计算时间,您可以在创建时插入一个虚拟值,然后运行更新,例如 update TimeWorked set TotalTime=TIMESTAMPDIFF(HOUR,结束,开始)或类似的东西
标签: mysql sql subquery mysql-error-1093