【发布时间】:2019-01-21 19:14:03
【问题描述】:
我知道这个问题已经有了一些答案,但它们似乎都不适合我。
基本上,我的任务只不过是随着时间推移而安排的预设:我想在截止日期前更新任务日期;另外,当我到达最后期限时,我需要根据预设值更新组件表的值。
我成功进行了查询以更新如下所示的截止日期:
UPDATE tasks
SET tasks.start_date = DATE_ADD(
tasks.start_date, INTERVAL tasks.frequency SECOND
)
WHERE tasks.start_date <= CURRENT_DATE AND tasks.hour <= CURRENT_TIME
当我尝试在截止日期的同时更新组件行时,我无法让它工作。我的查询如下所示:
UPDATE tasks,components
INNER JOIN presets ON presets.id = tasks.id_preset
INNER JOIN preset_values ON preset_values.id_preset = presets.id
INNER JOIN preset_values AS pv2 ON pv2.serial_number =
components.serial_number
SET tasks.start_date = DATE_ADD(
tasks.start_date, INTERVAL tasks.frequency SECOND
),
components.value = pv2.value,
components.state = pv2.on_off
WHERE tasks.start_date <= CURRENT_DATE AND tasks.hour <= CURRENT_TIME
我收到的消息错误是: MySQL 说:文档
1054 - “on 子句”中的未知列“tasks.id_preset”
你能帮我让这个查询工作吗?谢谢
组件表:https://i.stack.imgur.com/VOZX8.png
预设表:https://i.stack.imgur.com/Fs7yO.png
preset_values 表:https://i.stack.imgur.com/AZkcm.png
任务表:https://i.stack.imgur.com/0qSEe.png
EDIT :三思而后行,我选择了两个单独的更新查询。它目前看起来像这样。如果有人有一个单一的更新解决方案,如果它的性能更好,我会很高兴使用它。否则我会暂时坚持这个解决方案。谢谢大家的热心帮助。
BEGIN
UPDATE
components AS c1
INNER JOIN preset_values AS pv1
ON
pv1.serial_number = c1.serial_number
INNER JOIN tasks AS t1
ON
t1.id_preset = pv1.id_preset
SET
c1.value = pv1.value,
c1.state = pv1.on_off
WHERE
t1.start_date <= CURRENT_DATE AND t1.hour <= CURRENT_TIME AND t1.on_off=1;
UPDATE
tasks
SET
tasks.start_date = DATE_ADD(
tasks.start_date,
INTERVAL tasks.frequency SECOND
)
WHERE
tasks.start_date <= CURRENT_DATE AND tasks.hour <= CURRENT_TIME AND t1.on_off=1 ;
END
【问题讨论】:
-
当前的错误信息是什么?
-
错误
unknown column in on clause应该告诉你所有。由于您没有公开表结构,因此没有人可以猜测您的 on 子句中的 6 个字段名称中的哪一个是错误的。通常错误消息是:“错误代码:1054。'on 子句'中的未知列 'column_name'” -
我更新了我的问题。我很抱歉一开始就很不清楚。谢谢各位
标签: mysql phpmyadmin