Mysql - Вы не можете указать целевую таблицу для обновления в предложении FROM - недопонимание подзапроса? - PullRequest
0 голосов
/ 05 июля 2019

Я застрял, делая проект для школьного банкомата.и учителя едва объяснили нам 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. Вы не можете указать целевую таблицу 'arbeitszeit' для обновления в предложении FROM

Я уже посмотрел другие посты здесь ипохоже, что это связано с ограничениями подзапроса MySQL.И все же я не могу найти свою ошибку здесь.

Что мне нужно сделать, чтобы исправить запрос?

Примечание. Я перевел части имен на английский, чтобы упростить его.Имена в реальной таблице не представляют собой каких-либо утверждений.

1 Ответ

2 голосов
/ 05 июля 2019

Не помещайте 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

Это похоже на использование JOIN вместо подзапроса в предложении WHERE при попытке выполнить UPDATE или DELETE, как в

Ошибка MySQL 1093 - Не удалось указать целевую таблицу для обновления в предложении FROM

...