gpt4 book ai didi

mysql - UPDATE INNER JOIN on 子句中的未知列

转载 作者:行者123 更新时间:2023-11-30 21:35:06 29 4
gpt4 key购买 nike

我知道这个问题已经有一些答案,但似乎没有一个对我有用。

基本上,我的任务只不过是随着时间的推移而预设:我想在到达截止日期时更新任务日期;当我到达截止日期时,我需要根据预设值更新组件表的值。

我成功地进行了更新截止日期的查询,如下所示:

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”

你能帮我让这个查询工作吗?谢谢

组件表:/image/VOZX8.png

预设表:/image/Fs7yO.png

预设值表:/image/AZkcm.png

任务表:/image/0qSEe.png

编辑:三思而后我选择了两个单独的更新查询。目前看起来像这样。如果有人有一个单一的更新解决方案,我会很乐意使用它,如果它的性能更好的话。否则我会暂时坚持这个解决方案。谢谢大家的热心帮助。

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

最佳答案

如果出于某种原因(极不可能)确实需要交叉连接,则应使用 CROSS JOIN子句或将逗号分隔的表交换为 components, tasks .您的查询

UPDATE tasks,components INNER JOIN presets ON presets.id = tasks.id_preset ...

表示

UPDATE tasks, (components INNER JOIN presets ON presets.id = tasks.id_preset) ...

显然没有tasks.id_presetcomponents INNER JOIN presets ON presets.id = tasks.id_preset

但是,交叉联接意味着您过滤的每个显式联接行都与表的每一行组合 components .最后每一行将执行一个

SET
components.value = pv2.value,
components.state = pv2.on_off

我不认为这是有意为之的。如果这个对笛卡尔积的操作确实是您想要的,请三思。

有一个serial_numbercomponents , 所以你很可能想要

UPDATE     tasks
INNER JOIN presets ON presets.id = tasks.id_preset
INNER JOIN preset_values ON preset_values.id_preset = presets.id
INNER_JOIN components ON components.serial_number = preset_values.serial_number

SET ...

关于mysql - UPDATE INNER JOIN on 子句中的未知列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54296445/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com